ModelForm在提交时没有找到字段

时间:2016-06-03 10:40:43

标签: django django-forms

我目前有这个ModelForm用于验证新的用户注册:

class RegistrationForm(forms.ModelForm):
    email = forms.CharField(max_length=75, required=True)
    password = forms.PasswordInput()
    password_confirm = forms.PasswordInput()

    class Meta:
        model = User
        fields = ['username', 'email', 'password']

    def clean(self):
        if self.password != self.password_confirm:
            self.add_error('password_confirm', 'Passwords do not match.')

用户需要确认他的密码。提交此表单时,我收到以下错误:

  

ValueError at / register

     

' RegistrationForm'没有名为' password_confirm'。

的字段

我也尝试过使用self.cleaned_data,但仍然会遇到同样的错误。

无法删除fields属性,也无法将password_confirm添加到其中。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

passwordpassword_confirm被定义为小部件,而非表单字段。

定义两个CharField并传递widget参数:

class RegistrationForm(forms.ModelForm):
    email = forms.CharField(max_length=75, required=True)
    password = forms.CharField(widget=forms.PasswordInput)
    password_confirm = forms.CharField(widget=forms.PasswordInput)

答案 1 :(得分:2)

您需要首先调用超级清洁,然后您应该使用已清理的数据而不是字段。

def clean(self):
    cleaned_data = super(RegistrationForm, self).clean()
    if cleaned_data.get('password') != cleaned_data.get('password_confirm'):
        self.add_error('password_confirm', 'Passwords do not match.')