modelform:覆盖clean方法

rom*_*rom 13 django overriding modelform data-cleaning

关于模型的清理方法,我有两个问题.这是我的例子:

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
Run Code Online (Sandbox Code Playgroud)
  1. 我应该一直打电话给标准清洁方法吗?

    cleaned_data=super(AddProfileForm, self).clean()
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我应该总是返回cleaning_data变量吗?

    return cleaned_data
    
    Run Code Online (Sandbox Code Playgroud)

Roh*_*han 14

对于1,是,如果要使用父类的验证器.请参阅doc上的此解释.

警告

ModelForm.clean()方法设置一个标志,使模型验证步骤验证标记为unique,unique_together或unique_for_date | month | year的模型字段的唯一性.

如果要覆盖clean()方法并维护此验证,则必须调用父类的clean()方法.

对于2,是的,如果数据正确验证.否则会引发验证错误.