Пользовательская форма регистрации в django работает некорректно
Форма заполняется успешно, даже если введен короткий числовой пароль. Я хочу, чтобы форма не могла задавать короткие пароли, состоящие только из цифр.
#forms.py
class RegisterUserForm(forms.ModelForm):
    email = forms.EmailField(required=True, label='Адрес электронной почты')
    password1 = forms.CharField(label='Пароль',
                                widget=forms.PasswordInput,
                                help_text=password_validation.password_validators_help_text_html())
    password2 = forms.CharField(label='Пароль повторно',
                                widget=forms.PasswordInput,
                                help_text='Введите тот же самый пароль ещё раз для проверки')
    captcha = CaptchaField(label='Введите текст с картинки ', error_messages={'invalid': 'Неправильный текст'}, generator='captcha.helpers.math_challenge')
    def clean_password(self):
        password1 = self.cleaned_data['password1']
        if password1:
            password_validation.validate_password(password1)
        return password1
    def clean(self):
        super().clean()
        password1 = self.cleaned_data['password1']
        password2 = self.cleaned_data['password2']
        if password1 and password2 and password1 != password2:
            errors = {'password2': ValidationError(
                'Введённые пароли не совпадают', code='password_mismatch')}
            raise ValidationError(errors)
    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        if commit:
            user.save()
        return user
    class Meta:
        model = AdvUser
        fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'photo', 'description', 'captcha')
Как я могу решить эту проблему?
 Существует несколько валидаций паролей, которые предоставил django. Вы можете использовать их, добавив их в settings.py:
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 9,
        }
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
При этом пароль должен иметь длину не менее 9, и не может быть только числовым
Подробнее об этом вы можете прочитать в https://docs.djangoproject.com/en/3.2/topics/auth/passwords/#enabling-password-validation
Кроме того, если этого недостаточно, вы можете сделать свою собственную проверку пароля. Читайте об этом в https://docs.djangoproject.com/en/3.2/topics/auth/passwords/#writing-your-own-validator
Вы можете добавить дополнительное условие в свою функцию clean_password1(self) для достижения этого-
from django.core.exceptions import ValidationError
    class RegisterUserForm(forms.ModelForm):
        --------------------------------------------
        def clean_password1(self):
            password=self.cleaned_data['password1']
            if len(password1)==0:
                raise ValidationError("Please enter a password")
            if len(password1)<8:
                raise ValidationError("password is too short!")
            if password1.isdigit():
                raise ValidationError('Your password should contain letters!')
            return password1
                    Я изменил свою форму на эту и все стало работать правильно:
#forms.py
from django.contrib.auth.forms import UserCreationForm
class RegisterUserForm(UserCreationForm):
    email = forms.EmailField(required=True, label='Адрес электронной почты')
    class Meta:
        model = AdvUser
        fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'photo', 'description')