Автор Тема: Как переопределить стандартные ошибки в UserCreationForm  (Прочитано 2524 раз)

AdminUser

  • Team Lead
  • Юный джедай
  • *****
  • Сообщений: 65
  • Репутация +8/-0
    • Просмотр профиля
Привет всем

Я унаследовался от UserCrearionForm, все ок. Но на выходе при валидации получаю такие сообщения:
Цитата:
Enter a valid email address.
Цитата:
The two password fields didn't match.
И прочие. Как их можно изменить?

Пробовал переопределить их в error_messages, но безрезультатно
« Последнее редактирование: Января 27, 2019, 05:27:29 pm от AdminUser »

DigitalMag

  • Юный джедай
  • **
  • Сообщений: 89
  • Репутация +6/-0
    • Просмотр профиля
class SignUpForm(UserCreationForm):
    email = forms.EmailField(required=True, label='Почта')

    error_messages = {
'password_mismatch': "Два пароля не совпадают",
}
У меня все работает

AdminUser

  • Team Lead
  • Юный джедай
  • *****
  • Сообщений: 65
  • Репутация +8/-0
    • Просмотр профиля
class SignUpForm(UserCreationForm):
    email = forms.EmailField(required=True, label='Почта')

    error_messages = {
'password_mismatch': "Два пароля не совпадают",
}
У меня все работает
Ааа, ясно. Я в мета-классе зачем-то error_messages прописал

Насчет password_mismatch понятно. А как насчет всего остального?

DigitalMag

  • Юный джедай
  • **
  • Сообщений: 89
  • Репутация +6/-0
    • Просмотр профиля
Переопределить непосредственно в конструкторе:

        self.fields['email'].validators=[EmailValidator(message="Некорректный адрес электронной почты")]

AdminUser

  • Team Lead
  • Юный джедай
  • *****
  • Сообщений: 65
  • Репутация +8/-0
    • Просмотр профиля
global name 'ValidationError' is not defined

DigitalMag

  • Юный джедай
  • **
  • Сообщений: 89
  • Репутация +6/-0
    • Просмотр профиля
global name 'ValidationError' is not defined


from django.core.exceptions import ValidationError

AdminUser

  • Team Lead
  • Юный джедай
  • *****
  • Сообщений: 65
  • Репутация +8/-0
    • Просмотр профиля
Ок, спасибо

А как быть насчет

This password is too short. It must contain at least 8 characters.
This password is entirely numeric.

DigitalMag

  • Юный джедай
  • **
  • Сообщений: 89
  • Репутация +6/-0
    • Просмотр профиля
Почитай тут https://stackoverflow.com/questions/43915518/how-to-use-custom-password-validators-beside-the-django-auth-password-validators

Для изменения этого сообщения вам необходимо переопределить django.contrib.auth.password_validation.MinimumLengthValidator и заменить его в settings.py на свой

Вот его код:

class MinimumLengthValidator(object):
    """
    Validate whether the password is of a minimum length.
    """
    def __init__(self, min_length=8):
        self.min_length = min_length

    def validate(self, password, user=None):
        if len(password) < self.min_length:
            raise ValidationError(
                ungettext(
                    "This password is too short. It must contain at least %(min_length)d character.",
                    "This password is too short. It must contain at least %(min_length)d characters.",
                    self.min_length
                ),
                code='password_too_short',
                params={'min_length': self.min_length},
            )

    def get_help_text(self):
        return ungettext(
            "Your password must contain at least %(min_length)d character.",
            "Your password must contain at least %(min_length)d characters.",
            self.min_length
        ) % {'min_length': self.min_length}
« Последнее редактирование: Января 27, 2019, 05:14:24 pm от DigitalMag »