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

Django中如何从数据库读取数据预填充到文本框实现更新功能

解决方案

核心问题是你在实例化UpdateForm的时候没有传入要修改的数据库记录实例,Django的ModelForm需要通过instance参数关联目标记录,才能自动预填充字段值。

修改views.py代码即可,修改后完整代码如下:

@login_required()
def updatedata(request, id):
    photo = Photo.objects.get(id=id)
    if request.method == 'POST':
        # POST请求也要传入instance,保证save的时候是更新原有记录而非新增
        form = UpdateForm(request.POST, instance=photo)
        if form.is_valid():
            form.save()
            return redirect('logdata')
    else:
        # GET请求传入instance,自动预填充表单字段
        form = UpdateForm(instance=photo)

    return render(request, 'updatedata.html', {'form': form})

关键修改说明:

  • 删掉了原代码中无效的两行赋值逻辑Photo.mcoNum = request.POST.get('mcoNum')和Photo.reception = request.POST.get('reception'),这两行是给模型类赋值而非你查询到的photo实例,完全不会生效,且ModelForm的save()方法会自动处理字段赋值,无需手动编写
  • GET请求实例化表单时添加instance=photo参数,表单会自动把photo实例对应字段的值填充到输入框
  • POST请求实例化表单时也添加instance=photo参数,保证调用save()时是更新原有记录,而非新增一条新记录

你的forms.py和updatedata.html代码无需任何修改,修改完views.py后即可实现预期的预填充效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:07