form mixin for modelform?

时间:2014-11-14 02:33:44

标签: django django-forms

为什么以下内容没有给出包含3个字段的最终模型表单?

这两个额外的字段不可用。如果我将它们直接移动到模型表单中,它可以工作,但我想以单独的形式声明这些字段,因为我计划以多种形式重用它们。 有没有办法做到这一点?

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']

由于 麦克

1 个答案:

答案 0 :(得分:2)

由于Django使用元类的方式,使用这种方法实现这一点比你想象的要复杂得多。 (更多细节in this answer。)

我尝试重写构造函数 - (并注意mixin现在从对象扩展):

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):
     ...