我试图通过覆盖clean()方法为我的表单创建自定义验证器,并且由于某种原因,验证错误没有正确引发 . 这是我的代码:
forms.py
from django import forms
from django.contrib.auth import get_user_model
class EmailForm(forms.Form):
email_field = forms.EmailField(label='E-mail address', max_length=128)
def clean(self):
cleaned_data = super(EmailForm, self).clean()
email = cleaned_data.get('email')
try:
u = get_user_model().objects.get(email=email)
raise forms.ValidationError("E-mail already in database.")
print('validation error raised')
except:
pass
views.py
from django.shortcuts import render
from django.contrib import messages
from .forms import EmailForm
def email_form(request):
if request.method == 'POST':
form = EmailForm(request.POST)
# If the form is valid...
if form.is_valid():
messages.add_message(request, messages.SUCCESS, "Kaboom! Your referral e-mail was sent. Hang tight - we'll be sure to let you know when your friend makes a purchase.")
else:
messages.add_message(request, messages.ERROR, 'Error!')
else:
form = EmailForm()
return render(request, 'template.html', {'form': form})
template.html
<form action="{% url 'form-process' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
当我提交此表单时,输入应该引发验证错误(即,已经与我的数据库中的用户关联的电子邮件地址),我得到“成功”消息而不是错误 . 关于它的最奇怪的部分是在我的控制台中打印出“验证错误引发” - 但由于某种原因,表单进程和form.is_valid()传递为True .
任何人都可以告诉我为什么当输入重复的电子邮件时,form.is_valid不会在下面的代码中输出错误?
1 回答
它不能引发异常,因为你捕获的是除外 .