2010-11-05 87 views
0

我有一个EmailField(primary_key=True)。我正在使用ModelForm将表单呈现给用户,并且在回帖后我致电form.is_valid()Django ModelForm is_valid()错误类型

我在这个字段上看到两种类型的错误。一个是主键上的唯一值约束(该电子邮件地址已存在)。另一个是无效的电子邮件地址错误。

我想对每个错误做出不同的回应。是否有一种简单的方法可以确定验证失败是由于实际的输入格式错误还是唯一的约束?

回答

2

我想出了如何实现我想要的。我的目标是避免唯一的约束,以便在提交重复的电子邮件地址的情况下,我可以静静地忽略表单提交并成功(从用户的角度来看,因为他们的提交是一个noop)。

首先覆盖我的ModelForm定义中的validate_unique方法。

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方法已转换为一个空操作的视图将必须执行它需要的任何验证。所以不要致电form.save()致电entity = form.save(commit=False)。对实体执行所需的验证,并在需要时调用entity.save()

1

您可以先检查预先存在的钥匙,然后拨打is_valid()

+0

有没有办法做is_valid没有执行唯一约束验证? – 2010-11-05 05:13:51

+0

IIRC,唯一的约束是由数据库执行的,只要你点击数据库,可能不会。 – 2010-11-05 12:53:28