我使用 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 %}
我使用过人工智能并观看过视频,但显然一直以来没有人脑子里有这个问题。我确信这很容易做到,但我不知道如何做。
您可以通过传递
error_messages
参数来覆盖字段引发的默认消息。您必须传入一个字典,其中的键与您想要覆盖的错误消息相匹配。
以下是自定义错误消息的示例:
username = forms.CharField(error_messages={"required": "Please enter your name"})
您可以通过调用
username.clean("")
进行验证,这将引发自定义错误消息:
Traceback (most recent call last):
ValidationError: ['Please enter your name']
请参阅文档