2014-11-14 62 views
1

爲什麼下面不給出帶有3個字段的最終模型表單?formform mixin模型?

這兩個額外的字段不可用。如果我直接將它們移動到模型表單中,它可以工作,但我想以單獨的形式聲明這些字段,因爲我打算以多種形式重用它們。 有沒有辦法做到這一點?

class FormA(forms.Form): 
    extra_field_1 = forms.CharField(required=False) 
    extra_field_2 = forms.CharField(required=False) 

class ModelFormA(FormA, forms.ModelForm): 
    class Meta: 
     model = ModelA 
     fields = ['email'] 

感謝 邁克

回答

2

它比你想象的更復雜,這一點使用的,因爲在Django使用元類的方式,方法,來實現。 (更多細節in this answer。)

我會嘗試重寫構造 - (請注意,該混入從對象現在擴展):

class MyFormMixin(object): 
    def __init__(self, *args, **kwargs): 
     super(MyFormMixin, self).__init__(*args, **kwargs) 
     self.fields['extra_field_1'] = forms.CharField(required=False) 
     self.fields['extra_field_2'] = forms.CharField(required=False) 

class ModelFormA(MyFormMixin, forms.ModelForm): 
    ...