2012-04-17 23 views
3

私は、モデルAとモデルBを呼び出すことができるカップルモデルを持っています.AからBへの外部キーがあります。
つまり、AとBの間の基数は1:nです。formset、inlineformset_Factoryおよびkwargs

私はMF_Bと呼ばれるB用の対応するModelFormを作成しました。私はBで定義した追加のフィールドを持っています。

上記のコードが意味するように、ここではクエリセットを使用したいと思います。 (()のクエリーセットをスタッフフィールドに設定するためのオーバーライドコードは省略しました)

取引とは、1つのページにAと複数のフォームを作成するためですB.

とフォームは、私はちょうどinlineformset_factoryする新しいkwargsからの束を渡したいが、それはおよそ予想外のキーワード引数をcomplaingまま理由とDjangoでバックエンドのコードを見た後、私は理解:inlineformset_factoryは、カスタム取ることはありませんkwargs。メソッドsigで定義されたkwargsだけが必要です。

def inlineformset_factory(parent_model, model, form=ModelForm, 
          formset=BaseInlineFormSet, fk_name=None, 
          fields=None, exclude=None, 
          extra=3, can_order=False, can_delete=True, max_num=None, 
          formfield_callback=None): 

私は私が戻ってクエリセットでくるオブジェクトをフィルタリングするself.request.userを渡す必要があるためICANはformfield_callbackを使用しないと思います。

提案がありますか?

+0

これは、インラインフォームのフィールドをフィルタリングするためにrequest.userを使用する例を含む、[ここ](http://stackoverflow.com/questions/7310861/django-passing-parameters-to-inline-formset)に回答しました。 – dgel

+0

@dgelありがとう!私はそれを撃つだろう。 –

+0

@dgel django 1.3とクラスベースのビューを使用しています。私はまだ何とかself.requestにアクセスできますか?あなたが前もって時間を知っている場合に備えて、今それを試しています。 –

答えて

0

指定したクエリセットにMultipleChoiceFieldを制限するには、ファクトリを使用する必要があります。この場合、それは少し混乱してinlineformset_factory_factoryはなく、例えば次のようになります。forms.py(または類似)で

def make_inlineformset_factory(queryset, xmodel): 
    """ 
    Returns an Inlineformset factory for the given queryset . . . 
    """ 
    class My_inlineformset_factory(): 
     stuff = forms.ModelChoiceField(queryset=queryset) 
     class Meta: 
      model = xmodel 
    return My_inlineformset_factory 

具体的に私はここに最初の回答と同様のアプローチを考えています:django: How to limit field choices in formset? ですが、適切にInlineformset_factoryに適合させてください。

私は後で時間を見つけることができるときに詳細と説明を追加するように編集することがあります。