You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:48:05