Django:保存至新模型前检查文件是否存在,解决FileNotFoundError
Django中FileField实际文件存在性检查方案
直接判断product.img_1仅能确认数据库中存有文件路径,无法验证服务器上是否有对应实体文件,这就是你遇到FileNotFoundError的原因。以下是几种可靠的检查方法:
方法1:利用存储系统的exists()方法
Django默认的文件存储系统提供了exists()方法,可直接验证文件是否存在,兼容本地和云存储场景:
from django.core.files.storage import default_storage if product.img_1 and default_storage.exists(product.img_1.name): obj_apartment.basic_img = product.img_1
方法2:捕获异常验证文件可访问性
如果想模拟open()的逻辑,可尝试打开文件并捕获异常,避免报错:
if product.img_1: try: product.img_1.open() product.img_1.close() # 打开后务必关闭文件 obj_apartment.basic_img = product.img_1 except FileNotFoundError: pass # 文件不存在时跳过赋值
方法3:本地存储下直接检查文件路径
若仅使用本地文件系统存储,也可通过Python标准库直接检查绝对路径:
import os if product.img_1 and os.path.exists(product.img_1.path): obj_apartment.basic_img = product.img_1
注:该方法仅适用于本地存储,云存储场景请用方法1。
内容的提问来源于stack exchange,提问作者Maddie Graham
相关产品推荐
相关产品推荐

