我是Django的新手,我请求社区的帮助。
现在我正在做用户注册工作,我想做密码验证:如果密码不被重复,在底部字段下面会出现一条消息。据我所知,必须使用{{ form.errors }}
来呈现ValidationError
中指定的错误文本,但是当发生此错误时,它的文本不会显示在页面上。请告诉我如何解决这个问题。也许我不太明白Django表单是如何工作的。我尝试了其他答案中提出的解决方案,但不幸的是,到目前为止没有什么效果。谢谢。
forms.py:
from .models import CustomUser
class RegisterUserForm(forms.ModelForm):
email = forms.EmailField(required=True,
label="Адрес электронной почты",
widget=forms.EmailInput(attrs={'class': 'form-control',
'placeholder':'email'}))
password = forms.CharField(label='Пароль',
widget=forms.PasswordInput(attrs={'class': 'form-control',
'placeholder':'password'}) )
confirm_password = forms.CharField(label='Пароль(повторно)',
widget=forms.PasswordInput(attrs={'class': 'form-control',
'placeholder':'confirm password'}))
def clean(self):
super().clean()
password = self.cleaned_data['password']
confirm_password = self.cleaned_data['confirm_password']
if password != confirm_password:
raise ValidationError({'confirm_password': 'пароли не совпадают'})
class Meta:
model = CustomUser
fields = ("email", "password", "confirm_password")
views.py:
def sign_up(request):
if request.method=="POST":
form = RegisterUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('pages:index')
form = RegisterUserForm()
return render(request=request, template_name="users/sign_up.html", context={'form': form})
模板:
</head>
<link rel="stylesheet" type="text/css" href="{% static 'users/css/style.css' %}">
<head>
<div class="text-center log-in-bg rounded">
<img class="mb-4" src="{% static "users/images/logo_sign_in.png" %}" alt="" width="72" height="72">
<h1 class="h3 mb-3 font-weight-normal text-dark">РЕГИСТРАЦИЯ</h1>
<form method="post" class="form-signin">
{% csrf_token %}
{{ form.email.label_tag }}
{{ form.email }}
{{ form.password }}
{{ form.confirm_password }}
{{ form.errors }}
<button class="btn btn-lg btn-sign-in btn-block">Зарегистрироваться</button>
</form>
</div>
谢谢你的帮助。我希望我的问题不是太原始--我刚开始学习Django,我可能不知道一些事情=)
发布于 2022-07-23 13:37:18
错误是存在的。这是更正意见:
def sign_up(request):
if request.method=="POST":
form = RegisterUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('pages:index')
else:
form = RegisterUserForm()
return render(request, template_name="users/sign_up.html", context={'form': form})
我提出了新的要求。错误的背景被清除了。使用else
帮助我保存了这个上下文。另一方面,SamSparx的回答帮助我理解了如何使用add_error。
https://stackoverflow.com/questions/73090102
复制相似问题