19

モデルフォームの clean メソッドに関して 2 つの質問があります。これが私の例です:

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
  1. 常に標準の clean メソッドを呼び出す必要がありますか?

    cleaned_data=super(AddProfileForm, self).clean()
    
  2. 常にcleaned_data変数を返す必要がありますか?

    return cleaned_data
    
4

1 に答える 1

22

1 の場合、はい、親クラスのバリデーターを利用したい場合。ドキュメントのこの説明を参照してください。

警告

ModelForm.clean() メソッドは、モデル検証ステップで、unique、unique_together、または unique_for_date|month|year としてマークされたモデル フィールドの一意性を検証するフラグを設定します。

clean() メソッドをオーバーライドしてこの検証を維持したい場合は、親クラスの clean() メソッドを呼び出す必要があります。

2 の場合、はい (データが適切に検証されている場合)。それ以外の場合は、検証エラーが発生します。

于 2013-08-22T04:07:50.023 に答える