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

使用Django更新数据库记录时重复新增问题求助

Django更新记录却新增数据的问题解决

你当前的代码逻辑完全是创建新记录,而非更新原有记录。因为tblbook(BookID=..., BookName=...)这种写法会生成一个全新的tblbook模型实例——哪怕你复制了原记录的字段值,它和数据库中id对应的那条记录也没有任何关联,调用save()自然会插入一条新数据。


方案1:直接更新原模型实例

如果不需要用户提交表单,仅后端直接修改记录,直接操作获取到的book实例即可:

def update(request, id):
    book = tblbook.objects.get(id=id)
    # 在这里修改需要更新的字段,示例:
    # book.Price = 39.99
    # book.BookName = "修改后的书名"
    book.save()  # 保存原实例,执行数据库update操作
    return redirect("/show")

方案2:使用ModelForm处理用户提交的更新(符合Django规范)

如果要通过表单让用户编辑数据,必须用instance参数把表单和原记录绑定,这样save()时才会更新而非新增:

第一步:定义ModelForm

在你的app目录下创建forms.py,添加表单类:

from django import forms
from .models import tblbook

class BookUpdateForm(forms.ModelForm):
    class Meta:
        model = tblbook
        fields = ['BookID', 'BookName', 'Genre', 'Price']  # 指定允许编辑的字段

第二步:修改视图函数

def update(request, id):
    book = tblbook.objects.get(id=id)
    if request.method == 'POST':
        # 传入request.POST和instance=book,绑定原数据库记录
        form = BookUpdateForm(request.POST, instance=book)
        if form.is_valid():
            form.save()  # 此时执行update操作,而非新增
            return redirect("/show")
    else:
        # GET请求时,用原记录数据填充表单
        form = BookUpdateForm(instance=book)
    # 返回编辑页面(需自行创建对应的模板文件)
    return render(request, 'book_update.html', {'form': form})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:03