2013-01-04 24 views
0

假設我必須重寫ModelForm(位於forms.py)以設置labelswidgets。即:對於已被覆蓋的模型表設置'required = True'

class SomeForm(ModelForm): 
    def __init__(self,*args,**kwargs): 
     super(someForm, self).__init__(*args, **kwargs) 
      self.fields['someVal'].label = ... 
      self.fields['someVal'].widget = ... 

我該如何設置required=True

我知道__init__之前,我可以做到這一點,像這樣:

class SomeForm(ModelForm): 
    someVal = CharField(required=True) # << here 
    def __init__(self,*args,**kwargs): 
     super(someForm, self).__init__(*args, **kwargs) 
      self.fields['someVal'].label = ... 
      self.fields['someVal'].widget = ... 

但我做一些動態的東西,我想設置所需的__init__

回答

2
self.fields['someVal'].required = True 

是的,這只是因爲這:)你必須提供給類相同的屬性在你的領域字典

2

你需要重寫的F領域一樣簡單ORM。只需使用與模型中相同的字段名稱:

class SomeForm(forms.ModelForm): 
    field_a = forms.CharField(
     'My new label', max_length=30, required=True) # << here 

    def __init__(self,*args,**kwargs): 
     super(someForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = MyModel 

爲什麼採用這種方法?

我想通過定義一個新的領域,直接覆蓋的領域,是一個很好的方式,如果你想例如覆蓋許多屬性requiredlabelwidget