我在django有以下表格:
class UserEmailRegistrationForm(forms.Form):
password = forms.PasswordField(max_length=32, label=_('Password'),
validators=[validators.validate_password])
email = forms.EmailField(label=_('Email'),
validators=[validators.validate_email])
first_name = forms.CharField(max_length=35, label=_('First name'),
validators=[validators.validate_name])
last_name = forms.CharField(max_length=35, label=_('Last name'),
validators=[validators.validate_name])
大多数验证器都是自定义的,但是validate_email
如django.core.validators
所示。另外,我的观点也与此相关:
所有的验证器都工作正常,但是当我传递一个无效的电子邮件地址时,Enter a valid email address.
两次出现在form.errors
中。我得到的回答是:
{"email": [{"message": "Enter a valid email address.", "code": "invalid"}, {"message": "Enter a valid email address.", "code": "invalid"}]}
是什么原因造成的?我该如何解决?在
调试/查看发生了什么。在IDE中,单击EmailField并遵循层次结构。。。在
1.您的代码:
2.电子邮件字段:
^{pr2}$3.查菲尔德/没什么有趣的。在
4.
Field.__init__(...)
:简而言之,您使用validate_email两次。在
正如fraçois所暗示的,有两个相同的验证器与您的
email
字段关联。第一个在默认情况下是存在的,然后通过为validators
关键字参数(validators=[validators.validate_email]
)提供一个值来添加第二个。此验证器列表会附加到任何默认值。因此,您将看到2条验证错误消息。在所以您可以看到上面有2个注册的验证器。当表单被验证时,两者都将被执行:
^{pr2}$要修复此问题,只需声明不带验证器的email字段:
相关问题 更多 >
编程相关推荐