Я столкнулся со следующей проблемой.У меня есть модель, которая выглядит примерно так:
class Package(models.Model):
name = models.CharField(max_length=64)
file = models.FileField(upload_to="subdir",
storage=settings.PACKAGE_STORAGE,
null=True)
Существенным в этом примере является аргумент storage=
для конструктора FileField
.Заполняется значением от settings.py
.Там есть следующий код:
from django.core.files.storage import FileSystemStorage
PACKAGE_STORAGE = FileSystemStorage(location="/var/data", base_url="/")
Для производственного использования, это прекрасно работает.Но в моих модульных тестах загружаемые файлы теперь записываются в /var/data
, который содержит производственные данные.Я пытался поменять PACKAGE_STORE
в packages/tests.py
следующим образом
from django.conf import settings # This is line 1
from tempfile import mkdtemp
settings.PACKAGE_STORAGE = FileSystemStorage(location=mkdtemp(), base_url="/")
# rest of the imports and testing code below
, но реальная проблема заключается в том, что до загружается тестовый файл, приложение packages
и егомодели уже загружены, и поэтому настройка PACKAGE_STORAGE
была разрешена до того, как я смог изменить ее в коде настройки теста.
Существует ли элегантный способ переопределить этот конкретный параметр в тестированииконтекст?