我想在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 参数传递给表单?
答案 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))