0

我使用 {{ form }} 如此处所示

模板.html

<h4>Change your details</h4><br>

<form id="edit_form" method='post'>

    {% csrf_token %}

    {{ form }}

    <div class='section group'>
        <input id="update_details_button" type='submit' class='btn btn-primary wide' value='Change'/>
    </div>

</form>

视图.py

def user_view(request, is_admin):
    user = request.user

    form = myForm()

    if request.method == 'POST' and is_admin:
        form = myForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data

            user.name = data['name']
            user.country = data['country']
            user.save()

            messages.success(request, 'You have successfully updated your details.')

    return render(request, 'mysite/user.html', {
        'user': user,
        'is_admin': is_admin,
        'form': form,
    })

我的表格如下

class myForm(forms.Form):
    name = forms.CharField(
        label="Name",
        widget=forms.TextInput(attrs={'placeholder': 'Name'}))
    country = CountryField(blank_label='(select country)')

    def __init__(self, *args, **kwargs):
        super(myForm, self).__init__(*args, **kwargs)

名称字段在页面上显示正常,但没有 CountryField 的迹象,有人能指出错误吗?代码编译良好,并且在服务器运行时没有出错。

4

2 回答 2

3

CountryField是模型字段,而不是表单字段。您应该将其添加到您的用户模型中,在这种情况下,基于该模型的模型表单将自动生成一个国家/地区字段。由于看起来您实际上已经添加了一个名为countryUser 模型的字段,因此您应该使用 CountryField。

但是,作为参考,在非模型表单上手动执行会稍微复杂一些:

from django_countries import widgets, countries

class myForm(forms.Form):
    country = forms.ChoiceField(widget=CountrySelectWidget, choices=countries)
于 2015-04-27T12:51:24.243 回答
1

事实上它更简单:https ://pypi.org/project/django-countries/#custom-forms

from django_countries.fields import CountryField


class MyForm(forms.Form):
    country = CountryField(blank=True).formfield()

于 2020-04-22T09:44:21.797 回答