Django ModelForm多对多多选字段提交后未正常保存问题求助
问题原因
- 核心逻辑缺失:Django的ModelForm使用
save(commit=False)时,仅会暂存当前模型的单表字段值,不会自动处理多对多字段的关联关系。多对多字段需要模型实例先拿到数据库主键(即先完成实例的保存)后,再显式调用save_m2m()方法,才能将选中的关联值写入多对多中间表,你当前的代码缺少这一步调用。 - 冗余无效代码:视图中
capture = CaptureVersion.objects.all()、feedback.capture = capture两行代码完全多余,你的CaptureVersion模型未定义capture字段,这两行逻辑无实际作用可直接删除。
解决方案
修改views.py中的capture_form视图函数,在实例保存完成后调用save_m2m()即可,修正后的代码如下:
def capture_form(request): formulari_captura=FormulariCaptura() if request.method=="POST": formulari_captura=FormulariCaptura(request.POST or None) if formulari_captura.is_valid(): feedback = formulari_captura.save(commit=False) # 已删除多余的capture相关代码 feedback.save() # 新增调用save_m2m保存多对多关联 formulari_captura.save_m2m() messages.success(request, 'Kit de captura enregistrat correctament!') return render(request, "captureVersion/formulari_captura.html", {'formulari':formulari_captura})
补充说明
你之前在Django Admin、UpdateView中操作可以正常保存,是因为这两个场景下Django内置逻辑会自动判断并调用save_m2m()方法,不需要开发者手动处理,所以没有出现问题。
内容的提问来源于stack exchange,提问作者Swimming bird
相关产品推荐
相关产品推荐

