【问题标题】:Django Forms save_m2mDjango 表单 save_m2m
【发布时间】:2010-12-29 12:16:44
【问题描述】:

您好,我有一个模型,其中包含 2 个多对多字段。一个是标准的 m2m 字段,它不使用任何直通表,而另一个更复杂一些,并且有一个直通表。我正在使用 Django forms.modelform 来显示和保存表单。我必须保存表单的代码是

if form.is_valid():
        f = form.save(commit=False)
        f.modified_by = request.user
        f.save()
        form.save_m2m()

当我尝试保存表单时,出现以下错误:

无法在指定中间模型的 ManyToManyField 上设置值。

我知道当我执行 form.save_m2m() 时会发生这种情况,因为通过表。我想做的是告诉 Django 忽略带有直通表的 m2m 字段,但仍然保存没有直通表的 m2m 字段。然后我可以继续手动保存直通表字段的数据。

谢谢

【问题讨论】:

    标签: django forms many-to-many m2m


    【解决方案1】:

    “没有直通表”就无法保存 m2m

    您要保存的数据存储在直通表中(并且仅在直通表中)

    【讨论】:

      【解决方案2】:

      如果您有一个具有多个字段的模型,则一个是使用直通表完成的,另一个是没有直通表的常规多对多关系。您仍然可以使用 save_m2m() 来保存常规的。只需将通过字段添加到表单上的排除列表即可。

      在你的表单类中添加:

      class Meta:
          model = YourModel
          exclude = ('m2mthroughfield',)
      

      【讨论】:

        猜你喜欢
        • 2017-10-27
        • 1970-01-01
        • 2011-01-27
        • 2011-10-28
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2013-08-11
        相关资源
        最近更新 更多