我使用ModelForm来创建表单。一切正常,除了一件事 - 验证独特的领域。 代码:
class Article(models.Model):
...
title = models.CharField(max_length=255, unique=True, error_messages={'max_length' : 'max translation',
'unique' : 'unique translation',
'required' : 'req translation',})
...
class ArticleForm(ModelForm):
...
title = forms.CharField(max_length=255, min_length=3, error_messages={'required' : 'req translation',
'min_length' : 'min translation',
'max_length' : 'max translation',
'unique' : 'unique translation',})
但是当我用非唯一标题保存我的表单时,我没有得到自定义翻译错误,但是我得到了默认错误。如何修复它,显示我的唯一字段错误?
修改 我认为,我发现这样做非常方便。也许有人会用它:)
def unique_error_message(self, model_class, unique_check):
if 'put_field_name_here' in unique_check and len(unique_check) == 1:
return 'Here goes a custom unique error'
return super(Article, self).unique_error_message(model_class, unique_check)
答案 0 :(得分:1)
没有用于自定义验证消息的unique
密钥。我想说定制它是不值得的,但是如果必须的话,遵循方法应该有所帮助:
import re
class ArticleForm(ModelForm):
def clean(self, *args, **kwargs):
result = super(ArticleForm, self).clean(*args, **kwargs)
if self.non_field_errors:
for i,msg in enumerate(self.non_field_errors):
if re.match("^.+ already exists\.$", msg):
self.errors["__all__"][i] = custom_msg # Put your own text here
return result
这个解决方案依赖于Django的未记录内部,但它现在应该可以解决这个问题。同样,我的建议是坚持默认。