我尝试了解为什么模板上没有出现错误。 我正在使用带有支票(电子邮件和用户名)的经典注册。如果电子邮件已经存在=错误,并且用户名也相同。如果是关于密码(例如,密码不相同,...),则会出现错误,但对于电子邮件和用户名则什么也不会出现。
模板
<form method="post" class="user-log">
{% csrf_token %}
{% if form.errors %}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
Oupss <a data-toggle="collapse" href="#collapseExample" class="alert-link" style="text-decoration:none;">something wrong</a>!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true" style="color: #ffd14c;">×</span>
</button>
<div class="collapse" id="collapseExample">
{% for field in form %}
{% if field.errors %}
<strong>{{ form.label }}</strong> {{ field.errors|striptags }}
{% endif %}
{% endfor %}
</div>
</div>
观看次数
def signup(request):
if request.method == 'GET':
return render(request, 'register.html')
if request.method == 'POST':
form = RegisterForm(request.POST)
# print(form.errors.as_data())
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
mail_subject = 'Activate your registration'
message = render_to_string('user_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return redirect ('user:user_registration_process')
else:
form = RegisterForm()
return render(request, 'register.html', {'form': form})
表格
class RegisterForm(UserCreationForm):
username = forms.CharField(max_length=50)
email = forms.EmailField(max_length=50)
password1 = forms.CharField()
password2 = forms.CharField()
def clean(self):
username = self.cleaned_data.get('username')
if User.objects.filter(username=username).exists():
raise forms.ValidationError("Ooops username already exists")
email = self.cleaned_data.get('email')
password1 = self.cleaned_data.get('password1')
password1 = self.cleaned_data.get('password1')
if User.objects.filter(email=email).exists():
raise forms.ValidationError("Ooops email already exists")
return self.cleaned_data
class Meta(UserCreationForm):
model = User
fields = ('username','email','password1','password2')
答案 0 :(得分:1)
您需要在super()
clean()
方法
class RegisterForm(UserCreationForm):
username = forms.CharField(max_length=50)
email = forms.EmailField(max_length=50)
password1 = forms.CharField()
password2 = forms.CharField()
def clean(self):
super().clean() # you should call the super method here
username = self.cleaned_data.get('username')
if User.objects.filter(username=username).exists():
raise forms.ValidationError("Ooops username already exists")
email = self.cleaned_data.get('email')
password1 = self.cleaned_data.get('password1')
password1 = self.cleaned_data.get('password1')
if User.objects.filter(email=email).exists():
raise forms.ValidationError("Ooops email already exists")
return self.cleaned_data
class Meta(UserCreationForm):
model = User
fields = ('username', 'email', 'password1', 'password2')