我有一个EmailField(primary_key=True)。我正在使用ModelForm将表单呈现给用户,在回发中,我正在调用form.is_valid()

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

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

最佳答案

我想出了如何实现自己想要的。我的目标是避免唯一的约束,以便在提交重复的电子邮件地址的情况下,我可以默默地忽略表单提交并成功(从用户的角度出发,因为他们的提交是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()

关于django - Django ModelForm is_valid()错误类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4103569/

10-12 20:23