モデルフォームのクリーンメソッドについて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
常に標準のクリーンメソッドを呼び出す必要がありますか?
cleaned_data=super(AddProfileForm, self).clean()
常にcleaned_data変数を返す必要がありますか?
return cleaned_data
1の場合、はい、親クラスのバリデーターを利用したい場合。 doc のこの説明を参照してください。
警告
ModelForm.clean()メソッドは、モデル検証ステップで、unique、unique_together、unique_for_date | month | yearとしてマークされたモデルフィールドの一意性を検証するフラグを設定します。
Clean()メソッドをオーバーライドしてこの検証を維持する場合は、親クラスのclean()メソッドを呼び出す必要があります。
2の場合、はい、データが適切に検証されれば可能です。それ以外の場合は、検証エラーが発生します。