У меня есть представление регистрации, которое принимает адрес электронной почты, пароль, пароль подтверждения и дополнительную строку, которая должна быть уникальной. Все мои ошибки проверки возвращаются правильно (например, если электронное письмо дублируется, оно должно быть уникальным, а если пароли не совпадают, отображается, что пароли не совпадают). Однако дополнительная строка отображает страницу отладки django с ошибкой проверки, а не отображает ее в форме. Почему это происходит?
Django ошибка страницы отладки:
ValidationError at /signup/
['Extra string must be unique.']
Выдержка из шаблона:
{% for field in form %}
<div class="form-group">
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
<label for="{{ field.id_for_label }}">{{ field.label }}:</label>
{{ field }}
</div>
{% endfor %}
Форма:
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control'}))
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput(attrs={'class': 'form-control'}))
email = forms.CharField(label='Email', widget=forms.EmailInput(attrs={'class': 'form-control'}))
extra_string = forms.CharField(label='Extra String (Must be unique)', widget=forms.TextInput(attrs={'class': 'form-control'}))
class Meta:
model = User
fields = ('email',)
def clean_password2(self):
"""A function to check that the two passwords provided by the user match."""
# Check that the two password entries match
#: User's password.
password1 = self.cleaned_data.get("password1")
#: Password confirm.
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("The passwords must match.") #: This displays properly
return password2
def ensure_unique_string(self):
"""Checks that the entered extra string is unique"""
extra= self.cleaned_data.get("extra_string")
if len(ExtraString.objects.filter(name=extra)) > 0:
raise forms.ValidationError("Ana Group Name must be unique.") #: This displays django debug page
return extra
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.clean_password2())
user.extra_string = self.ensure_unique_string()
user.has_migrated_pwd = True
if commit:
user.save()
return user
Просмотр регистрации:
class SignUpView(View):
template_name = "account/signup.html"
def get(self, request):
form = UserCreationForm()
return render(request=request, template_name=self.template_name, context={
"form": form
})
def post(self, request):
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
messages.success(request, 'Successfully Registered')
next_url = request.POST.get('next') if 'next' in request.POST else 'profile'
return redirect(next_url)
return render(request, template_name=self.template_name, context={"form": form})