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
相关产品推荐
相关产品推荐

