【发布时间】:2019-04-23 06:27:18
【问题描述】:
我想在我的 html 表单中显示一条验证消息,例如“此电子邮件已在使用中”。
但我想我错过了一些东西。我在我的电子邮件字段中不断收到 IntegrityError。如果我在模型中使用 unique=True ,Django 不应该验证这一点并给出 ValidationError 吗?还是我必须自己尝试捕获 IntegrityError?
或者,也许可以向我展示在表单/模型中验证唯一用户的最佳实践。
models.py
class Customer(models.Model):
FirstName = models.CharField(max_length=50)
LastName = models.CharField(max_length=50)
Email = models.CharField(max_length=50, unique=True, error_messages={'unique':"This email is already in use"})
views.py
def customerform(request):
if request.method == 'POST':
form = CustomerForm(request.POST)
if form.is_valid():
post = Customer()
post.FirstName = form.cleaned_data['FirstName']
post.LastName = form.cleaned_data['LastName']
post.Email = form.cleaned_data['Email']
post.save()
return render(request, 'results.html', {
'FirstName': form.cleaned_data['FirstName'],
'Email': form.cleaned_data['Email'],})
else:
form = CustomerForm()
return render(request, 'form.html', {'form':form})
forms.py
class CustomerForm(forms.Form):
FirstName = forms.CharField (label='First name:', max_length=50)
LastName = forms.CharField (label='Last name:', max_length=50)
Email = forms.EmailField(label='Email:', max_length=50)
form.html
<form action="/customer/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
【问题讨论】:
-
我不确定它是否会如你所愿,但这看起来应该真的继承自
forms.ModelForm -
您的表单似乎没有
clean_Email()方法。这将是一个很好的起点。