正如this question中所解释的,我正在尝试隔离Django测试中完成的文件系统更改。
我在测试运行之前基本上改变了settings.MEDIA_ROOT
。不幸的是,Django存储类似乎不受它的影响,因此即使MEDIA_ROOT
指向另一个临时目录,文件也会保存在原始位置。
如何重新初始化Django Storage系统以反映新的媒体根?
更新:问题是设置文件已预先加载到django.conf.Settings
对象中,对settings.MEDIA_ROOT
的任何更改都不会反映在预加载的实例中。我仍然不知道如何克服这个问题。
答案 0 :(得分:2)
您可能希望在测试中使用Django的built-in feature to override settings。这正是它的设计目标。
直接从文档中注意with self.settings
:
from django.test import TestCase
class LoginTestCase(TestCase):
def test_login(self):
# First check for the default behavior
response = self.client.get('/sekrit/')
self.assertRedirects(response, '/accounts/login/?next=/sekrit/')
# Then override the LOGIN_URL setting
with self.settings(LOGIN_URL='/other/login/'):
response = self.client.get('/sekrit/')
self.assertRedirects(response, '/other/login/?next=/sekrit/')
答案 1 :(得分:1)
原来我只需要更改两个设置:
from django.conf import settings as django_settings
from project import settings
django_settings.MEDIA_ROOT = settings.MEDIA_ROOT = '....'
这解决了这个问题。
也许另一个问题是我没有在整个系统中使用django.conf.settings
,而是我自己导入的设置。我会在某些时候改变它。