summaryrefslogtreecommitdiff
path: root/django/db/models/fields/files.py
diff options
context:
space:
mode:
authormiigotu <miigotu@gmail.com>2020-03-31 12:12:39 +0200
committerCarlton Gibson <carlton@noumenal.es>2020-04-08 11:26:17 +0200
commit210657b791fec359a9109b69e566018253edfad0 (patch)
treed9bb41fcd6aae39772ac373697834b24f5193524 /django/db/models/fields/files.py
parentdb6933a032c850153a688b6c977691b37ca02745 (diff)
downloaddjango-210657b791fec359a9109b69e566018253edfad0.tar.gz
Fixed #28184 -- Allowed using a callable for FileField and ImageField storage.
Diffstat (limited to 'django/db/models/fields/files.py')
-rw-r--r--django/db/models/fields/files.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index 7ee38d937f..b682db414c 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -5,7 +5,7 @@ from django import forms
from django.core import checks
from django.core.files.base import File
from django.core.files.images import ImageFile
-from django.core.files.storage import default_storage
+from django.core.files.storage import Storage, default_storage
from django.db.models import signals
from django.db.models.fields import Field
from django.utils.translation import gettext_lazy as _
@@ -234,6 +234,13 @@ class FileField(Field):
self._primary_key_set_explicitly = 'primary_key' in kwargs
self.storage = storage or default_storage
+ if callable(self.storage):
+ self.storage = self.storage()
+ if not isinstance(self.storage, Storage):
+ raise TypeError(
+ "%s.storage must be a subclass/instance of %s.%s"
+ % (self.__class__.__qualname__, Storage.__module__, Storage.__qualname__)
+ )
self.upload_to = upload_to
kwargs.setdefault('max_length', 100)