创建对象并设置m2m关系

时间:2012-09-25 23:44:47

标签: django django-orm

我遇到鸡蛋和鸡蛋的情况。 我有一个formset,用户可以在其中修改现有数据。实例不应直接保存,而应将其添加为新对象。

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();

我的问题是sales_item,这是一个m2m字段。只需遍历它就会崩溃:

for item in modified_deal.sales_item:
  

'Deal'实例需要在a之前拥有主键值   可以使用多对多关系。

我不明白,这些是用户在modified_deal中选择的多项选择,为什么它只是遍历它就抛出异常?我怎么能解决这个问题?

1 个答案:

答案 0 :(得分: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();

这适合我。