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, да, если данные корректно проверяются. В противном случае повысите ошибку проверки.