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

Django视图触发MultiValueDictKeyError,请求排查代码问题

解决Django中request.FILES的MultiValueDictKeyError错误

出现这个错误的核心原因是你直接通过request.FILES['AttachDoc']取值,但这个键在request.FILES中不存在。下面是具体的排查和解决方法:

1. 检查前端表单的enctype属性

这是最常见的问题——如果表单没有设置enctype="multipart/form-data",浏览器根本不会把上传的文件发送到后端。请确保你的表单代码是这样的:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <!-- 其他表单字段:Status、Remark -->
    <input type="file" name="AttachDoc">
    <button type="submit">提交</button>
</form>

2. 处理用户未上传文件的情况

用户可能没选择文件就提交了表单,这时候request.FILES里不会有'AttachDoc'这个键。不要直接用方括号取值,改用get()方法安全获取:

if request.method == "POST":
    status = request.POST.get('Status', '')
    remark = request.POST.get('Remark', '')
    AttachDoc = request.FILES.get('AttachDoc')  # 不存在时返回None
    
    try:
        # 根据是否有文件来创建记录
        if AttachDoc:
            apptracking = Applicationtracking1.objects.create(
                application1=application1, 
                Remark=remark, 
                Status=status, 
                AttachDoc=AttachDoc
            )
        else:
            # 无文件时只保存其他字段(如果你的模型允许AttachDoc为空)
            apptracking = Applicationtracking1.objects.create(
                application1=application1, 
                Remark=remark, 
                Status=status
            )

另外,request.POST['Status']和request.POST['Remark']也存在同样的风险——如果这两个字段没被提交,也会抛出MultiValueDictKeyError,建议统一用get()方法并设置默认值。

3. 核对字段名拼写

检查前端文件输入框的name属性是否和后端的'AttachDoc'完全一致,大小写、拼写都不能出错。比如前端如果写的是name="attachdoc"(全小写),后端用'AttachDoc'就会找不到对应的键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:27