环境
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。在此感谢。