1
0
mirror of https://github.com/django/django.git synced 2025-06-02 10:09:12 +00:00

Fixed #36269 -- Documented how to test callable storage in FileField.

This commit is contained in:
Ahmed Nassar 2025-04-06 08:45:28 +02:00 committed by Sarah Boyce
parent 2c2f090555
commit 8bca33f68a

View File

@ -272,3 +272,36 @@ use :data:`~django.core.files.storage.storages`::
class MyModel(models.Model):
upload = models.FileField(storage=select_storage)
Because the callable is evaluated when your models classes are loaded, if you
need to override the :setting:`STORAGES` setting in tests, you should use a
``LazyObject`` subclass instead::
from django.core.files.storage import storages
from django.utils.functional import LazyObject
class OtherStorage(LazyObject):
def _setup(self):
self._wrapped = storages["mystorage"]
my_storage = OtherStorage()
class MyModel(models.Model):
upload = models.FileField(storage=my_storage)
The ``LazyObject`` delays the evaluation of the storage until it's actually
needed, allowing :func:`~django.test.override_settings` to take effect::
@override_settings(
STORAGES={
"mystorage": {
"BACKEND": "django.core.files.storage.InMemoryStorage",
}
}
)
def test_storage():
model = MyModel()
assert isinstance(model.upload.storage, InMemoryStorage)