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

Django使用commit=False获取上传文件名不存库报错如何解决

问题解决方法

错误原因

upload.save() 执行时会同时完成两个操作:将上传文件持久化到服务器磁盘、将模型实例数据写入SQLite数据库。你注释掉该行后,上传文件还未完成磁盘落盘,upload.file.name 没有生成有效的路径值,直接读取就会触发文件不存在的报错。

可用解决方案

方案1:直接从表单获取原始文件名(推荐,无额外IO操作)

无需依赖模型保存逻辑,直接从表单的 cleaned_data 中提取上传文件的原始名称,全程不会触发数据库写入:

upload = form.save(commit=False)
# 直接从表单文件对象取文件名,不需要执行save操作
uploadFile = form.cleaned_data['file'].name
# 后续如果不需要保存实例到数据库,无需再调用upload.save()

方案2:需要落盘文件时的处理逻辑

如果你有业务要求必须先把上传文件存储到磁盘再获取文件名,可以先完成文件落盘,再清空文件字段后再写入数据库(或者直接不写入数据库):

upload = form.save(commit=False)
upload.save()
uploadFile = upload.file.name.split('/')[-1]
# 不需要存文件名到数据库的话,清空文件字段后再保存
upload.file = None
upload.save()
# 如果不需要存这条记录到数据库,删除上面两行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:15:03