2009-09-26 64 views

回答

58

最簡單的方法是將一組默認錯誤提供給表單域定義。表單字段可以爲其指定一個參數。例如:

my_default_errors = { 
    'required': 'This field is required', 
    'invalid': 'Enter a valid value' 
} 

class MyForm(forms.Form): 
    some_field = forms.CharField(error_messages=my_default_errors) 
    .... 

希望這會有所幫助。

+0

是的。但我想重寫默認設置,具有設置表單的靈活性... 在你的情況下,我將不得不每次都手動合併默認和表單錯誤消息字典 – Brock 2009-10-01 15:07:52

+0

@Brock這不是那麼糟糕。您只需編寫'my_default_errors.update({...})'來放入字段或形成特定的值。 – 2012-01-03 22:03:45

3

嗯,似乎沒有簡單的解決方法的問題。

威樂通過Django的代碼飛掠,我發現默認的錯誤消息是硬編碼到每個窗體域類,爲前:

class CharField(Field): 
    default_error_messages = { 
     'max_length': _(u'Ensure this value has at most %(max)d characters (it has %(length)d).'), 
     'min_length': _(u'Ensure this value has at least %(min)d characters (it has %(length)d).'), 
    } 

而最簡單的方法是使用error_messages說法,所以我不得不寫包裝函數:

def DZForm(name, args = {}): 
    error_messages = { 
     'required': u'required', 
     'invalid': u'invalid', 
    } 
    if 'error_messages' in args.keys(): 
     args['error_messages'] = error_messages.update(args['error_messages']) 
    else: 
     args['error_messages'] = error_messages 
    return getattr(forms, name)(**args) 

如果smdb知道這樣做的更高貴的方式真的appreaciate看看吧:)

謝謝!

-5

由於此頁面出現在搜索中,可能值得添加我的$ 0.02,即使問題已經過時。 (我還是習慣了Stack Overflow的特殊禮儀。)

下劃線(「_」)是ugettext_lazy的別名(如果這是正確的術語);只需使用「硬編碼」消息查看文件頂部的導入語句即可。然後,Django的國際化文檔應該有所幫助,例如http://www.djangobook.com/en/2.0/chapter19/

6

也來自這裏谷歌和我需要的是覆蓋默認所需的消息,我的表單中的所有字段,而不是每次我定義新的表單字段時傳遞error_messages參數。此外,我還沒有準備好深入i18n,這個應用程序不需要多語言。在這篇博客的評論是最接近我想要的東西: -

http://davedash.com/2008/11/28/custom-error-messages-for-django-forms/

對於已要求所有郵件表單域,這是我做的: -

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     for k, field in self.fields.items(): 
      if 'required' in field.error_messages: 
       field.error_messages['required'] = 'You have to field this.' 

class MUserForm(MyForm): 
    user = forms.CharField(
     label="Username", 
    ) 
    .... 
1

說我有一個BaseForm一些error_messages詞典,如:

error_messages = { 
    'required': 'This field is required', 
    'caps': 'This field if case sensitive' 
} 

,我想重寫錯誤消息之一:

class MySpecialForm(BaseForm): 
    def __init__(self, *args, **kwargs): 
     super(MySpecialForm, self).__init__(*args, **kwargs) 
     self.error_messages['caps'] = 'Hey, that CAPSLOCK is on!!!' 

基本上,只是重寫其中一個字典值。但我不確定它如何與國際化合作。

3

從ProDjango書:

from django.forms import fields, util 


class LatitudeField(fields.DecimalField): 
    default_error_messages = { 
     'out_of_range': u'Value must be within -90 and 90.', 
    } 


    def clean(self, value): 
     value = super(LatitudeField, self).clean(value) 
     if not -90 <= value <= 90: 
      raise util.ValidationError(self.error_messages['out_of_range']) 
     return value 
7

要全局覆蓋「需要」的錯誤信息,將場上的default_error_messages類屬性:

# form error message override 
from django.forms import Field 
from django.utils.translation import ugettext_lazy 
Field.default_error_messages = { 
    'required': ugettext_lazy("This field is mandatory."), 
} 

這需要所有字段初始化之前發生的,例如通過將其包含在settings.py中。

+0

這隻猴子修補它,應該避免,因爲那麼你的應用程序更依賴加載順序(在許多其他原因)。 – 2017-02-26 00:40:13