【发布时间】:2016-01-04 21:12:07
【问题描述】:
我有一个使用 User 模型注册用户的表单。
表格:
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
模板:
{% block content %}
<p>Register</p>
{{ user_form.as_p }}
{% endblock %}
views.py:
def register_view(request):
if request.method == "POST":
user_form = UserForm(request.POST)
if user_form.is_valid:
user = user_form.save()
return HttpResponseRedirect('/account/registered/')
else:
user_form = UserForm()
return render(request, 'register_view.html', {
'user_form': user_form
})
但我需要在表单中添加额外的功能:
- 显示电子邮件字段两次并在提交时验证两个电子邮件字段。
- 密码的最小长度为 8 个字符。
我尝试在字段列表中设置电子邮件字段两次:
fields = ['first_name', 'last_name', 'username', 'email', 'password']
但它只显示一个电子邮件字段。
如何根据需要使用 ModelForm 自定义表单?
更新
使用答案更新了我的表单,但现在我收到了错误:
/account/register/处的KeyError
'确认电子邮件'
更新表格:
class UserForm(forms.ModelForm):
confirm_email = forms.EmailField(label="Confirm email")
def clean(self):
email = self.cleaned_data['email']
confirm_email = self.cleaned_data['confirm_email']
password = self.cleaned_data['password']
if email != confirm_email:
raise ValidationError({'confirm_email': "Both email doesn't match."})
if len(password) < 8:
raise ValidationError({'password': "Password should be of minimum 8 characters."})
return super(UserForm, self).clean()
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'confirm_email', 'password']
【问题讨论】:
标签: django django-forms