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

Django提交MCO编号未更新指定记录反而新增行问题求解

问题原因

Django ModelForm执行save()方法时,判断是新增还是更新数据的核心依据是初始化表单时是否传入了instance参数:如果没有传入该参数,默认执行新增逻辑;如果传入了数据库中已存在的实例对象,则会执行该条记录的更新逻辑。
你虽然在视图中已经通过传入的id查询到了对应要修改的Photo实例,但在初始化POST和GET场景的表单时都没有将该实例绑定到表单,因此表单每次提交都会触发新增逻辑,导致生成多余的记录。

修复方法

只需要修改views.py中的AddMCO视图代码,在两处初始化表单的位置都加入instance=photo参数即可:

@login_required()
def AddMCO(request, id):
    photo = get_object_or_404(Photo, id=id)
    if request.method == "POST":
        # 提交数据时同时绑定要更新的实例
        form = AddMCOForm(request.POST, instance=photo)
        if form.is_valid():
            form.save()
            return redirect('ViewMCO')
    else:
        # 加载表单时绑定实例,可自动填充已有mcoNum值(可选优化)
        form = AddMCOForm(instance=photo)
    context = {
        "form": form,
        "photo": photo
    }
   
    return render(request, 'AddMCO.html', context, )

修改后提交表单就会直接更新对应id的Photo记录的mcoNum字段,不会生成新的冗余数据行。

内容的提问来源于stack exchange,提问作者Rainysky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:03