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

Django更新模型字段时出现MultiValueDictKeyError错误如何解决

问题根因
  • 你代码中强制从request.FILES中读取title和insurance_card两个键值,当提交表单未上传对应图片时,这两个键不存在,直接触发MultiValueDictKeyError异常
  • 你已经使用了Django ModelForm,但依然手动实现字段赋值逻辑,不仅冗余,还完全浪费了ModelForm自动处理字段更新的能力,且你设置的FileNotFoundError捕获逻辑无法捕获当前抛出的键不存在异常,完全无效
  • 手动查询trucks对象、手动赋值的逻辑存在额外风险:如果用户修改了vin字段,会导致查询不到原有对象,触发额外报错
解决方案

直接删除所有手动保存的逻辑,使用ModelForm自带的save()方法即可,它会自动处理ImageField更新逻辑:如果提交了新图片则更新,未提交则保留原有旧图片,不会强制要求重新上传。

修改后的视图代码如下:

def editTrucks(request, pk):
    item = get_object_or_404(trucks, pk=pk)
    if request.method == "POST":
        form = trucksForms(request.POST, request.FILES, instance=item)
        if form.is_valid():
            # 直接调用form.save()即可完成所有字段的更新,包括图片字段
            form.save()
            return redirect('index')
    else:
        form = trucksForms(instance=item)
    return render(request, 'Inventory/edit_items.html', {'form': form})
补充说明

请确认你的模板edit_items.html中的<form>标签添加了enctype="multipart/form-data"属性,否则上传的图片文件无法正常传递到后台:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:45:06