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

Django更新视图报MultiValueDictKeyError但新增功能正常求解

问题根因

你触发MultiValueDictKeyError的核心原因是前端表单input的name属性值,和后端视图从request.POST里取的key名不匹配,具体对应错误如下:

  • 前端duyurutipi对应的input name是dduyurutipi,后端取值写的是request.POST['duyurutipi']
  • 前端incidentno对应的input name是dincidentno,后端取值写的是request.POST['incidentno']
  • 前端baslangiczamani对应的input name是dbaslangiczamani,后端取值写的是request.POST['baslangiczamani']
  • 前端olusturulmatarihi对应的input name是dolusturulmatarihi,后端取值写的是request.POST['olusturulmatarihi']
  • 前端aciklama对应的input name是daciklama,后端取值写的是request.POST['aciklama']
解决方案

两种修复方案二选一即可:

方案1:修改后端视图取值逻辑(无需改动前端)

把views.py里的更新函数替换为以下代码:

def problemduyurusuupdate(request, id):
    problemmember = problemduyuru.objects.get(id=id)
    # 取值key替换为前端表单input对应的name值
    problemmember.duyurutipi = request.POST['dduyurutipi']
    problemmember.incidentno = request.POST['dincidentno']
    problemmember.baslangiczamani = request.POST['dbaslangiczamani']
    problemmember.aciklama = request.POST['daciklama']
    problemmember.olusturulmatarihi = request.POST['dolusturulmatarihi']
    problemmember.save()
    messages.success(request, 'Alarmlar was updated successfully!')
    return redirect('/problemduyurusu')

方案2:修改前端表单name属性(和你之前复用的代码逻辑统一)

把所有input标签的name属性前缀d去掉,和后端取值key保持一致即可,示例如下:
把

<input type="text" class="form-control" value="{{ problemmembers.duyurutipi }}" name="dduyurutipi" id="dduyurutipi">

修改为

<input type="text" class="form-control" value="{{ problemmembers.duyurutipi }}" name="duyurutipi" id="dduyurutipi">

剩余4个input同理,分别把name改为incidentno、baslangiczamani、olusturulmatarihi、aciklama。

优化建议

为了避免后续再出现同类错误,推荐两种优化方式:

  • 取值时使用request.POST.get('key', '默认值'),就算key不存在也不会直接抛错,只会返回预设的默认值,便于排查问题
  • 优先使用Django自带的ModelForm处理表单提交,自动完成字段映射和参数校验,无需手动编写逐个取值的逻辑,大幅降低手写错误概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:06