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