电子邮件验证程序可以覆盖clean()方法吗?

时间:2019-07-09 19:47:42

标签: django django-forms

问题:

我正在尝试在Django表单类上编写clean()方法,并且在大多数情况下它正在工作(密码验证有效,但电子邮件无效吗?)。我的目标是将两个电子邮件字段和两个密码字段相互比较,并在它们不匹配时提出验证问题。

我尝试使用Django docs here中详细介绍的raise forms.ValidationError(),但是我希望在两个字段上都显示验证错误,因此我尝试使用self.add_error('field', msg)方法代替在同一页面上有详细说明。

我的尝试:

forms.py

class userRegistrationForm(forms.Form):
    # field definitions here

def clean(self):
  cleaned_data = super(userRegistrationForm, self).clean()
        email1 = cleaned_data.get('email')
        email2 = cleaned_data.get('emailConfirm')
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")

        if password1 != password2:
            msg = 'Your Passwords do not match...'
            self.add_error('password1', msg)
            self.add_error('password2', msg)
        elif email1 != email2:
            msg = 'Your emails do not match...'
            self.add_error('email', msg)
            self.add_error('emailConfirm', msg)

确切错误:

最终发生的事情是,无论什么情况,第一个电子邮件字段都将验证无误,并且如果存在不匹配,则错误只会显示在第二个字段上,除非我键入完整的正确电子邮件地址,否则该字段还可以恢复到模板标记({{ form.field_id.errors }})中没有验证错误。另一方面,以完全相同的方式编码的密码字段就可以了。可以是内置的电子邮件验证程序吗?

0 个答案:

没有答案