我有EmailField(primary_key=True)
。我正在使用ModelForm
向用户呈现表单,而在帖子后面我正在调用form.is_valid()
。
我在这个字段上看到两种类型的错误。一个是主键上的唯一值约束(此电子邮件地址已存在)。另一个是无效的电子邮件地址错误。
我想对每个错误做出不同的回应。是否有一种简单的方法可以确定验证失败是由于实际输入格式错误与唯一约束?
答案 0 :(得分:5)
我想出了如何达到我想要的效果。我的目标是避免使用唯一约束,以便在提交重复的电子邮件地址的情况下,我可以默默地忽略表单提交并成功(从用户的角度来看,因为他们的提交是noop)。
首先覆盖validate_unique
定义上的ModelForm
方法。
from django.forms import ModelForm
from apps.announcer.models import Subscriber
class SubscribeForm(ModelForm):
class Meta:
model = Subscriber
exclude = ('created',)
def validate_unique(self):
pass
由于validate_unique
方法已转换为noop,因此视图必须执行所需的任何验证。因此,不要拨打form.save()
来电entity = form.save(commit=False)
。在实体上执行所需的验证,如果需要,请致电entity.save()
。
答案 1 :(得分:1)
您可以先检查预先存在的密钥,然后拨打is_valid()
吗?