0

私は鶏が先か卵が先かという状況に遭遇しました。ユーザーが既存のデータを変更できるフォームセットがあります。ただし、インスタンスは直接保存されませんが、代わりに新しいオブジェクトとして追加されます。

for fm in attached_deals_formset:                
    if fm.has_changed():
        modified_deal = fm.save(commit=False)
        deal = Deal.objects.create(deal_id = modified_deal.deal_id, ... )
        for item in modified_deal.sales_item: #m2m
            deal.sales_item.add(item)
        deal.save_m2m();

私の問題は、m2mフィールドであるsales_itemです。それを通過するだけでクラッシュします:

for item in modified_deal.sales_item:

「Deal」インスタンスは、多対多の関係を使用する前に、主キー値を持っている必要があります。

わかりませんが、これらはユーザーがmodified_deal内で選択した複数選択ですが、トラバースするだけで例外がスローされるのはなぜですか?そして、どうすればこれを解決できますか?

4

1 に答える 1

0

私は解決策を見つけました。 modified_deal = fm.save(commit=False)クラス値のみが含まれます。m2mフィールドは個別のテーブルを指しているため、まだ設定されていません。

ユーザーのm2m選択にアクセスするにform.cleaned_data[]は、モデルのかなりの部分の一部としてそのフィールドを使用するだけです。

    modified_deal = fm.save(commit=False)
    deal = Deal.objects.create(deal_id = modified_deal.deal_id, ... )
    for item in fm.cleaned_data['sales_item']:
         deal.sales_item.add(item)
    deal.save();

これは私のために働きます。

于 2012-09-26T08:54:07.307 に答える