modelform: переопределить метод очистки
у меня есть два вопроса относительно чистого метода на modelform. Вот мой пример:
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
-
должен ли я всегда вызывать стандартный метод clean?
cleaned_data=super(AddProfileForm, self).clean()
-
должен ли я всегда возвращать переменную cleaned_data?
return cleaned_data
1 ответов
для 1, Да, если вы хотите использовать валидаторы родительского класса. См. это объяснение на doc.
предупреждение
В ModelForm.метод clean () устанавливает флаг, который делает модель этап проверки валидации полей модели, которые отмечен как уникальный, unique_together или unique_for_date|месяц|год.
Если вы хотите переопределить метод Clean() и сохранить эту проверка, вы должны вызвать метод clean () родительского класса.
для 2, да, если данные проверяются должным образом. В противном случае вызовите ошибку проверки.