2012-05-02 32 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.'