2011-03-21 51 views
12

我知道如何在使用普通的Django Forms時設置自己的自定義錯誤消息。但是,基於現有模型的Django Form呢?出現Django,模型和表單:替換「此字段是必需的」消息

Class MyModel(models.Model): 
    name = models.CharField(max_length='30') 

Class MyForm(forms.ModelForm): 
    Class Meta: 
     model = MyModel 

如果我創造這樣的形式,並嘗試將它張貼,消息「這是必須填寫」:考慮下面的模型和形式。但如何改變它?當然,我可以做這樣的事情:

Class MyForm(forms.ModelForm): 
    model = forms.CharField(error_messages = {'required': "something..."}) 
    Class Meta: 
     model = MyModel 

但根據文件,MAX_LENGTH屬性將不會被保留,我必須把它明確地寫入表單定義。我認爲Model Forms的目的是避免兩次編寫相同的代碼。所以必須有一些簡單的方法來改變自定義錯誤信息而不用重寫整個表單。基本上,如果我的信息看起來像「需要字段」名稱「,那對我來說就足夠了。

請幫忙。

回答

29
class MyForm(forms.ModelForm): 
    class Meta: 
      model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['name'].error_messages = {'required': 'custom required message'} 

     # if you want to do it to all of them 
     for field in self.fields.values(): 
      field.error_messages = {'required':'The field {fieldname} is required'.format(
       fieldname=field.label)} 
+0

謝謝,看起來不錯。不過,我的印象是,你確實避免了兩次編寫相同的代碼,而是編寫了一些更長,更醜的代碼;)然而,至少在大型表單上會省下一些工作,所以再次感謝。 – tobik 2011-03-21 23:45:40

+0

我想每個人都有自己的想法。如果您需要替換所有「必需」的消息,這是迄今爲止最乾淨的。我也不認爲這是更長的時間,除非你計算__init__調用,我通常在一切中使用它。 – 2011-03-22 02:03:21

+2

注意,如果你得到一個'invalid'錯誤,你將得到[一個神祕的'KeyError'](http://stackoverflow.com/questions/7463159/django-form-is-valid-keeps-throwing-keyerror)不會爲它提供信息。 – 2011-09-18 18:26:36

0

您可以在運行時在__init__方法中更改字段屬性。

相關問題