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

Django执行更新操作未修改原有数据反而新建对象问题求助

根因分析

Django 中 ModelForm 执行保存操作的逻辑由实例化时传入的参数决定:

  • 仅传入表单数据时,save() 会执行新增逻辑,创建新的模型实例写入数据库
  • 同时传入 instance 参数绑定原有模型对象时,save() 才会执行更新逻辑,修改传入的实例数据

你当前的视图代码仅在 GET 请求初始化表单时绑定了原有产品实例,POST 请求处理阶段的表单实例没有绑定原有对象,因此提交后会生成新的产品记录。

修复代码

仅需修改视图函数中 POST 请求下的表单实例化逻辑,补充 instance 参数即可,修改后完整视图代码如下:

@login_required(login_url='login')
def editProduct(request, id):
    # 可替换为 get_object_or_404(Products, id=id) 避免id不存在时报服务器错误
    product = Products.objects.get(id=id)
    if request.method == 'POST':
        # 新增instance参数绑定要修改的原有产品对象
        form = ProductForm(request.POST, request.FILES, instance=product)
        if form.is_valid():
            form.save()
            messages.success(request, '产品修改成功')
            return redirect('index')
    else:
        form = ProductForm(instance=product)

    context = {
        'form': form
    }
    return render(request, 'store/edit-product.html', context)    

可选优化

模板中提交按钮的文本可改为「修改产品」更贴合编辑场景,不影响现有功能运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:27:00