Вот что я бы сделал:
Это единственный чистый метод, который вам нужно определить, чтобы убедиться, что 2 пароля верны и что имя пользователя корректно.
Используйте метод clean_fieldname
, чтобы вам не нужно было больше работать для проверки имени пользователя.
def clean_password2(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if not password2:
raise forms.ValidationError("You must confirm your password")
if password1 != password2:
raise forms.ValidationError("Your passwords do not match")
return password2
Вы абсолютно правы, вам не нужно нужно проверять уникальность имени пользователя, потому что ModelForm знает, что оно должно быть уникальным.
Проблема с вашим кодом заключается в том, что вы переопределяете метод clean()
, что означает, что ModelForm не выполняет свою «настоящую» очистку ().
Чтобы получить проверку по умолчанию, позвоните super(MyForm, self).clean()
или лучше, но не переопределяйте clean
и укажите только clean_password2
.