关于模型的清理方法,我有两个问题。这是我的例子:
class AddProfileForm(ModelForm):
...
password = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}))
password_verify = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}), label='Retype password')
...
class Meta:
model = UserModel
fields=("username", "password", "password_verify", "first_name", "last_name", "date_of_birth", "biography", "contacts", )
#called on validation of the form
def clean(self):
#run the standard clean method first
cleaned_data=super(AddProfileForm, self).clean()
password = cleaned_data.get("password")
password_verify = cleaned_data.get("password_verify")
#check if passwords are entered and match
if password and password_verify and password==password_verify:
print "pwd ok"
else:
raise forms.ValidationError("Passwords do not match!")
#always return the cleaned data
return cleaned_data
我应该一直打电话给标准的清洁方法吗?
cleaned_data=super(AddProfileForm, self).clean()
我应该总是返回cleaning_data变量吗?
return cleaned_data
答案 0 :(得分:13)
对于1,是,如果要使用父类的验证器。请参阅doc上的此解释。
警告
ModelForm.clean()方法设置一个生成模型的标志 验证步骤验证模型字段的唯一性 标记为唯一,unique_together或unique_for_date | month | year。
如果要覆盖clean()方法并维护它 验证时,必须调用父类的clean()方法。
对于2,是的,如果数据正确验证。否则会引发验证错误。