我遇到鸡蛋和鸡蛋的情况。 我有一个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中选择的多项选择,为什么它只是遍历它就抛出异常?我怎么能解决这个问题?
答案 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();
这适合我。