自定义Django中的modelformset字段

时间:2009-07-27 06:41:56

标签: python django

我想在modelformset中使用以下表单类。它需要 maps 参数并相应地自定义表单字段。

class MyModelForm(forms.ModelForm):
    def __init__(self, maps, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        #customize fields here

    class Meta:
        model = MyModel

我的问题是,如何在modelformset中使用此表单?当我使用下面的 form 参数传递它时,我得到一个例外。

MyFormSet = modelformset_factory(MyModel, form=MyModelForm(maps))

我怀疑它只需要表单类,如果是这样,我如何将 maps 参数传递给表单?

1 个答案:

答案 0 :(得分:2)

请记住,Django使用类定义作为一种DSL来定义各种事物。因此,在需要类对象的地方实例化会破坏事物。

一种方法是创建自己的表单工厂。类似的东西:

 def mymodelform_factory(maps):
     class MyModelForm(forms.ModelForm):
          def __init__(self, *args, **kwargs):
               super(MyModelForm, self).__init__(*args, **kwargs)
               #use maps to customize form delcaration here
          class Meta:
               model = myModel
     return MyModelForm

然后你可以这样做:

 MyFormSet = modelformset_factory(MyModel, form=mymodelform_factory(maps))