删除必填字段标签“此字段为必填”。并使用“clean_email”修复错误

问题描述 投票:0回答:1

我使用 Django 内置的“UserCreationForm”来创建注册表单,但有不必要的说明“此字段为必填项”。这些字段是必需的,我想删除它们,请帮忙,或者至少翻译成俄语,以便铭文是俄语的,如果可以的话,还可以帮助修复表单中的 clean_email,这样它就不会总是抛出这个现有电子邮件的 1 次测试条目后的铭文是结果的屏幕截图 注册用户表格

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

用户/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 %}

我使用过人工智能并观看过视频,但显然一直以来没有人脑子里有这个问题。我确信这很容易做到,但我不知道如何做。

python django forms registration
1个回答
0
投票

您可以通过传递

error_messages
参数来覆盖字段引发的默认消息。您必须传入一个字典,其中的键与您想要覆盖的错误消息相匹配。 以下是自定义错误消息的示例:

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

您可以通过调用

username.clean("")
进行验证,这将引发自定义错误消息:

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

请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.