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

使用django-minio-backend时,测试文件上传至旧存储桶的问题解决

解决Django测试中Minio存储桶不切换的问题

问题出在Django的文件存储类是懒加载的单例实例,项目(包括测试)启动时会缓存已初始化的存储对象,你修改settings后并没有让存储类重新读取新配置,导致依然使用旧桶。

解决方案:修改测试执行器,清除存储类缓存

在更新settings配置后,强制重置默认存储的缓存实例,让它重新根据新配置初始化Minio存储后端:

from django.core.files.storage import default_storage
from django.test.runner import DiscoverRunner
from django.core.management import call_command
from django.conf import settings

class CoreTestRunner(DiscoverRunner):

    def setup_test_environment(self, **kwargs):
        super().setup_test_environment(**kwargs)
        self._make_test_file_storage()

    def _make_test_file_storage(self):
        minio_test_bucket = "test-bucket"
        # 更新Minio桶配置
        settings.MINIO_MEDIA_FILES_BUCKET = minio_test_bucket
        settings.MINIO_PRIVATE_BUCKETS = [minio_test_bucket]
        
        # 清除默认存储的缓存实例,强制重新初始化
        if hasattr(default_storage, '_wrapped'):
            del default_storage._wrapped
            
        # 初始化测试桶
        call_command("initialize_buckets")

额外注意事项

  • 如果你的模型中显式指定了存储类实例(比如FileField(storage=MinioMediaStorage())),需要在测试用例中重新实例化存储类,或者改用default_storage来处理文件上传。
  • 建议在teardown_test_environment方法中添加测试桶的清理逻辑,避免残留测试资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:39:19