mirror of
https://github.com/django/django.git
synced 2025-06-04 02:59:13 +00:00
Fixed #36269 -- Documented how to test callable storage in FileField.
This commit is contained in:
parent
2c2f090555
commit
8bca33f68a
@ -272,3 +272,36 @@ use :data:`~django.core.files.storage.storages`::
|
|||||||
|
|
||||||
class MyModel(models.Model):
|
class MyModel(models.Model):
|
||||||
upload = models.FileField(storage=select_storage)
|
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user