我目前有这个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添加到其中。
如何解决这个问题?
答案 0 :(得分:2)
password
和password_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.')