验证ModelForm的问题

时间:2011-01-03 19:05:52

标签: python django forms modelform

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

1 个答案:

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