1

我使用 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)
4

1 回答 1

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 的未记录内部结构,但它现在应该可以解决问题。同样,我的建议是坚持默认。

于 2011-01-04T01:47:40.407 回答