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

Django使用Dropzone.js上传文件出现NoneType错误如何解决

问题根因
  • Dropzone默认开启自动上传,文件拖入后会立刻发POST请求完成上传,你点击提交按钮时触发的第二次POST请求没有携带文件,导致request.FILES.get('file')返回None,调用.name就触发了属性错误。你提到的图片路径能正常存入数据库,就是第一次自动上传时写入成功的结果。
  • 你开启了文件多选,用get('file')只能获取到第一个文件,无法处理多文件上传场景。
  • 多余的FileSystemStorage调用:Django的ImageField本身会在模型实例保存时自动处理文件存储,你不需要手动调用FileSystemStorage存文件。
修复步骤

1. 修改前端Dropzone配置,关闭自动上传

首先给form标签添加id:

<form id="uploadDropzone" action="{% url 'document_upload' %}" method="POST" class="dropzone dz" role="form" enctype="multipart/form-data">

然后在HTML末尾添加Dropzone配置,禁用自动上传,绑定提交按钮触发上传,完成后跳转:

<script>
Dropzone.options.uploadDropzone = {
  autoProcessQueue: false, // 关闭自动上传
  uploadMultiple: true, // 支持多文件上传
  parallelUploads: 10, // 最大并行上传数
  maxFiles: 10, // 单次最多上传文件数
  init: function () {
    const dropzone = this;
    // 绑定提交按钮点击事件
    document.querySelector("#cf-submit").addEventListener("click", function (e) {
      e.preventDefault();
      dropzone.processQueue(); // 手动触发上传队列
    });
    // 所有文件上传完成后跳转
    this.on("queuecomplete", function () {
      // 替换为你要跳转的页面地址,比如上传成功页、文件列表页
      window.location.href = "/upload-success/";
    });
  }
};
</script>

2. 优化后端视图逻辑,加非空判断、支持多文件

修改views.py代码,移除多余的文件存储逻辑,加空值校验,上传完成后重定向避免表单重复提交:

from django.shortcuts import redirect

def document_upload(request):
    c = main.objects.get(username=request.session['username'])
    unq_id = c.unq_id
    if request.method == 'POST':
        # 获取所有上传的文件
        file_list = request.FILES.getlist('file')
        # 空文件校验,没有文件直接返回不执行后续逻辑
        if not file_list:
            return render(request, 'Main/document_upload.html', {"msg": "请选择要上传的文件"})
        # 循环处理所有文件
        for file in file_list:
            Doc.objects.create(user_id=unq_id, upload=file)
        # 上传完成后重定向,不要返回render避免重复提交
        return redirect("你要跳转的路由名称")
    return render(request, 'Main/document_upload.html')

可选优化

如果不需要多文件上传,只需要在Dropzone配置里把uploadMultiple设为false,后端继续用request.FILES.get('file')即可,同样要先判断返回值是否为None再执行后续操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:24:00