环境

Python 3.7.7
Django 2.2.10

描述

在 save_model 时,没有进行 save 操作,模型中的 ForeignKey 和其他常规字段不会被保存,但是 ManyToMany 字段还是会被保存。

解决

重写 save_related,因为 ManyToMany 的保存操作是在 save_related 中执行的...

admin.py

# 其他代码略...

def save_related(self, request, form, formsets, change):
    obj = form.instance
    # 在 Model 中,定义了一个 status 字段,来判断是否执行保存 ManyToMany 字段。
    if not obj.status: # 如果 False,不保存。
        return
    else: # 如果 Ture,保存。
        form.save_m2m()
        for formset in formsets:
            self.save_formset(request, form, formset, change=change)

参考

stackoverflow.com/questions/6200233/manytomany-field-not-saved-when-using-django-admin 由于没有走通过 Django 的文档,很多地方确实没想到。而该问题虽然与我的问题只是类似,但是其中 Tomba 的回答给了我解决该问题的 Keyword。在此感谢。

最后修改:2020 年 11 月 15 日 08 : 18 PM
如果觉得文章帮助了您,您可以随意赞赏。