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

