2009-07-27 4 views
0

モデルフォームセットで次のフォームクラスを使用したいと思います。 マップのパラメータを受け取り、それに応じてフォームフィールドをカスタマイズします。Djangoのモデルフォームセットフィールドをカスタマイズする

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

    class Meta: 
     model = MyModel 

私の質問は、どのようにモデルフォームセットでこのフォームを使用しますか?以下のようにという形式のパラメータを渡すと、例外が発生します。

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

私はどのように私は、フォームにマップパラメータを渡すならば、それは、唯一のフォームクラスを望んでいる疑いがありますか?

+0

正確な複製:http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset/ –

答えて

2

Djangoは、定義をDSLの一種として使用して、さまざまなことを定義しています。そのため、クラスオブジェクトが予想される場所でインスタンス化すると、オブジェクトが壊れてしまいます。

1つの方法は、独自のフォームファクトリを作成することです。ような何か:

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)) 
+0

ありがとう、まさに私が探していたもの – drjeep

+0

ファクトリ関数内でクラスを定義することの欠点は、もはやそのクラスをサブクラス化できなくなることです。それが気になる場合は、このソリューションを使用することもできます:http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset/624013#624013 –

+0

リンクありがとう、非常に有益なトピック – drjeep

関連する問題