Удалите ярлык обязательного поля 'This field is required.' и исправьте ошибку с 'cleanan_email'.

Я использую встроенный Django, 'UserCreationForm' для создания формы регистрации, но там есть лишние указания 'This field is required.', что эти поля обязательны, я хочу их убрать, помогите пожалуйста, или хотя бы переведите на русский, чтобы надпись была на русском, если можно, также помогите исправить clean_email в формах, чтобы он не всегда выкидывал эту надпись после 1 тестового ввода существующего email вот скриншот результата RegisterUserForm

views.py:

class RegisterUser(CreateView):
    form_class = RegisterUserForm
    template_name = 'users/register.html'
    extra_context = {'title': 'Регистрация'}
    get_success_url = reverse_lazy('users:login')

forms.py:

class RegisterUserForm(UserCreationForm):
    username = forms.CharField(label="Логин:", widget=forms.TextInput(attrs={'class': "form-input"}))
    password1 = forms.CharField(label="Пароль:", widget=forms.PasswordInput(attrs={'class': "form-input"}))
    password2 = forms.CharField(label="Повтор пароля:", widget=forms.PasswordInput(attrs={'class': "form-input"}))

    class Meta:
        model = get_user_model()
        fields = {'username', 'email', 'first_name', 'last_name', 'password1', 'password2'}
        labels = {
            'username': 'Логин:',
            'email': 'E-mail:',
            'first_name': 'Имя:',
            'last_name': 'Фамилия:',
            'password1': 'Пароль:',
            'password2': 'Повторить пароль:',
        }
        widgets = {
            'username': forms.TextInput(attrs={'class': "form-input"}),
            'first_name': forms.TextInput(attrs={'class': "form-input"}),
            'last_name': forms.TextInput(attrs={'class': "form-input"}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.order_fields(['username', 'email', 'first_name', 'last_name', 'password1', 'password2'])

    def clean_email(self):
        email = self.cleaned_data['email']
        if get_user_model().objects.filter(email=email).exists():
            raise forms.ValidationError(("E-mail должен быть уникальным!"), code="invalid")
        return email

users/register.html:

{% extends 'users/base.html' %}

{% block title %}Регистрация{% endblock %}

{% block content %}
<h1>Регистрация</h1>
<form method="post">
    {% csrf_token %}
    {% for f in form %}
    <p><label class="form-label" for="{{ f.id_for_label }}">{{ f.label }} </label>{{ f }}</p>
    <div class="form-error">{{ f.errors }}</div>
    {% endfor %}
    <p><button type="submit">Регистистрация</button></p>
</form>
{% endblock %}

Я использовал ИИ и смотрел видео, но, видимо, никто не задавался этим вопросом все это время. Я уверен, что это очень легко сделать, но я не знаю, как.

Вы можете переопределить сообщения, которые поле выдает по умолчанию, передав аргумент error_messages. Вам нужно будет передать словарь с ключами, соответствующими сообщениям об ошибках, которые вы хотите переопределить. Вот пример пользовательского сообщения об ошибке:

username = forms.CharField(error_messages={"required": "Please enter your name"})

Вы можете проверить, вызвав username.clean(""), что приведет к появлению пользовательского сообщения об ошибке:

Traceback (most recent call last):
ValidationError: ['Please enter your name']

Смотрите документы

register.html:

{% extends 'users/base.html' %}

{% block title %}Регистрация{% endblock %}

{% block content %}
<h1>Регистрация</h1>
<form method="post">
    {% csrf_token %}
    {% for f in form %}
    <div class="form-error">
        {# Отображаем только ошибки, не связанные с обязательностью поля #}
        {% for error in f.errors %}
            {% if error != "Обязательное поле." %}  {# Или другое сообщение по умолчанию #}
                {{ error }}
            {% endif %}
        {% endfor %}
    </div>
    <p><label class="form-label" for="{{ f.id_for_label }}">{{ f.label }} </label>{{ f }}</p>
    {% endfor %}
    <p><button type="submit">Регистрация</button></p>
</form>
{% endblock %}

мы просто фильтруем ошибки в html для обязательных полей и, если условие выполняется, не показываем ошибку

Вернуться на верх