为唯一字段显示Django错误消息

为唯一字段显示Django错误消息,django,django-models,Django,Django Models,当重复条目尝试保存时,我想更改默认错误消息,因为它们应该是唯一的,即unique=True。很像这样: email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."}) 但是,在上述情况下,unique只是一个猜测,不起作用。我也无法找出错误的实际名称。有人知道正确的名字吗 注意,此验证是模型级的,而不是表单验证 编辑: 更多信息,当前错误信息通

当重复条目尝试保存时,我想更改默认错误消息,因为它们应该是唯一的,即
unique=True
。很像这样:

email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
但是,在上述情况下,
unique
只是一个猜测,不起作用。我也无法找出错误的实际名称。有人知道正确的名字吗

注意,此验证是模型级的,而不是表单验证

编辑: 更多信息,当前错误信息通过
表单显示。错误

[model_name] with this [field_label] already exists

这对用户不是很友好,所以我想覆盖它…

唯一的错误消息是由
django.db.models.base.unique\u error\u message
构造的(至少在django 1.3上是这样)。

这个错误消息显然是在
django/db/models/base.py
文件中硬编码的

def unique_error_message(self, model_class, unique_check):
    opts = model_class._meta
    model_name = capfirst(opts.verbose_name)

    # A unique field
    if len(unique_check) == 1:
        field_name = unique_check[0]
        field_label = capfirst(opts.get_field(field_name).verbose_name)
        # Insert the error into the error dict, very sneaky
        return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
            'model_name': unicode(model_name),
            'field_label': unicode(field_label)
        }
    # unique_together
    else:
        field_labels = map(lambda f: capfirst(opts.get_field(f).verbose_name), unique_check)
        field_labels = get_text_list(field_labels, _('and'))
        return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
            'model_name': unicode(model_name),
            'field_label': unicode(field_labels)
        }
解决此问题的一种方法是创建从
EmailField
派生的自定义模型,并覆盖
唯一错误消息
方法。但请注意,当您升级到较新版本的Django时,它可能会破坏一切。

非常感谢

email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
这一点现在非常有效

如果要自定义错误消息,如
invalided
,请在
forms.ModelForm

email = forms.EmailField(error_messages={'invalid': 'Your email address is incorrect'})
但如ben所述,
unique
消息应在
model
字段中定制

email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})

由于Django 1.4,您提供的确切示例实际上是有效的。也许他们找到了你的错误报告,并修复了它


unique
是一个字段选项:在标题中,您指的是IntegrityError,当试图保存一个值不唯一的实例时会引发该错误,请参见:@Bjorn,也许我的标题有点混乱。我已经修改过了。我想覆盖标准错误消息,但我不知道错误消息的名称。我认为它被称为独特的,但可能不是。也许我不能这样覆盖它?对。非常感谢。我也发现了这张票,希望有一天能实施。。。