【问题标题】:Creating an object and setting the m2m relationship创建对象并设置 m2m 关系
【发布时间】:2012-09-25 23:44:46
【问题描述】:

我遇到了先有后有的情况。 我有一个表单集,用户可以在其中修改现有数据。实例不应直接保存,而是应作为新对象添加。

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中选择的多选,为什么只是遍历它就会抛出异常?我该如何解决这个问题?

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    我找到了解决方案。 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();
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多