2012-05-02 33 views
0

我试图自定义用户输入的文本长度超过模型中CharField的最大长度时显示的错误消息。该模型定义的字段,如下所示:Django - 更改CharField TextInput上的max_length错误消息

name = models.CharField(max_length=200) 

我对这个模型定义表单字段,如下一个的ModelForm:

name = forms.CharField(widget=forms.TextInput(attrs={'class':"span8", 'placeholder':'e.g. How do I setup a wi-fi network? How to sync my iPhone with iCloud?'}), 
          error_messages={'required': 'Please enter a question.', 'max_length': 'Your question is too long.'}) 

也能正常工作的“必要”的错误消息,但'max_length'错误消息在这里仍然使用Django的默认消息。我是否做错了或者应该以其他方式定制这些文字?

回答

3

'max_length''django.core.validators.MaxLengthValidator'检查,其中有硬编码的错误消息。您可以通过更换瓦特/你自己的版本:

# after the name or ModelForm definition 
name.validators[-1].message = 'Your question is too long.' 
+0

这有效,但在模型中的名称定义之后。我试图把它放在ModelForm中的名称定义之后,但在那个时候name.validators是一个空列表。 –

+4

@JamieForrest验证器只适用于'form.CharField'不具有'None'' max_length'。你可以在验证程序中检查'isinstance(validator,MaxLengthValidator)'而不是硬编码的'[-1]' – okm

0

我不知道从哪个版本是工作,但现在你可以这样做:

class YouForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     self.fields['you_field'].error_messages = {'max_length': 'Ensure this value has at most %(limit_value)d character (it has %(show_value)d).'} 
0

您可以创建'django.core.validators.MaxLengthValidator'

from django.core.validators import MaxValueValidator 

class MyValidator(MaxValueValidator): 
    message = 'Your question is too long.'