升级Django 4.2时遇DEFAULT_FILE_STORAGE/STORAGES互斥问题求助
Django 4.2 引入了新的STORAGES配置项统一管理文件存储,它和旧的DEFAULT_FILE_STORAGE、STATICFILES_STORAGE互斥,不能同时生效。你遇到的问题本质是当前生效配置中同时存在STORAGES和DEFAULT_FILE_STORAGE,以下是针对性解决步骤:
彻底清理项目配置中的旧存储设置
检查项目根目录的settings.py,以及所有通过from .xxx import *导入的子配置文件,确保没有定义DEFAULT_FILE_STORAGE或STATICFILES_STORAGE。如果有,直接删除这些旧配置项。排查环境变量干扰
检查系统环境变量或项目的.env文件,确认是否存在DJANGO_DEFAULT_FILE_STORAGE这类环境变量。Django会优先读取环境变量中的配置,若存在会自动注入DEFAULT_FILE_STORAGE,和STORAGES产生冲突,直接删除这类环境变量即可。用
diffsettings定位冲突来源
运行命令:python manage.py diffsettings搜索输出结果中的
DEFAULT_FILE_STORAGE,如果该配置项存在且不是默认值,说明有第三方依赖或其他配置逻辑在注入这个旧设置。针对对应的依赖,要么升级到支持Django 4.2的版本,要么在项目settings中显式覆盖掉它(直接删除旧配置即可,因为你已经配置了STORAGES)。禁止修改Django全局源码
手动修改django\conf\global_settings.py是非常不规范的操作,后续Django版本更新会覆盖你的修改,还会导致开发、测试、生产环境配置不一致。必须通过项目自身的settings文件解决问题,不要碰框架源码。验证自定义存储类的可用性
确认你配置的custom.core.storage.GzipManifestStaticfilesStorage是正确可导入的,若该类不存在或导入失败,Django可能会 fallback 到旧的存储配置逻辑,间接引发冲突。可以在Python shell中测试导入:from custom.core.storage import GzipManifestStaticfilesStorage
内容的提问来源于stack exchange,提问作者sAm

