Ben*_*ths 25 django django-models
当重复条目尝试保存时,我想更改默认错误消息,因为它们应该是唯一的,即unique=True.很像这样:
email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
Run Code Online (Sandbox Code Playgroud)
但是,unique在上面的情况下是猜测,并不起作用.我也无法找出错误的名称实际上是什么.有谁知道正确的名字?
请注意,此验证是模型级别,而不是表单验证.
编辑:更多信息,目前显示当前错误消息form.errors:
[model_name] with this [field_label] already exists
Run Code Online (Sandbox Code Playgroud)
哪个不是非常用户友好,所以我想覆盖它...
Ste*_*hen 40
非常感谢你.
email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
Run Code Online (Sandbox Code Playgroud)
这个现在效果很好.
如果您想自定义error_messages invalided,请执行此操作forms.ModelForm
email = forms.EmailField(error_messages={'invalid': 'Your email address is incorrect'})
Run Code Online (Sandbox Code Playgroud)
但是,如本所述,unique消息应该在model现场定制
email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
Run Code Online (Sandbox Code Playgroud)
小智 7
此错误消息显然在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)
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是创建从EmailField派生的自定义模型,并覆盖unique_error_message方法.但要注意,升级到较新版本的Django时可能会破坏它.
| 归档时间: |
|
| 查看次数: |
11421 次 |
| 最近记录: |