Django中的自定义默认文件存储
我正在尝试使用自定义文件存储(https://bitbucket.org/david/django-storages/wiki/S3Storage)。我按照说明在我的settings.py文件中添加了相关内容。
DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage'
但是当我去导入default_storage时,它并不是S3BotoStorage类型。我必须调用_setup()。可是即使这样,我模型中的字段仍然是DefaultStorage类型。
Python 2.6.6 (r266:84292, Dec 29 2010, 22:02:51)
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.files.storage import default_storage
>>> print default_storage
<django.core.files.storage.DefaultStorage object at 0x1016f7c10>
>>> print default_storage._wrapped
None
>>> from base.models import Payload
>>> p = Payload()
>>> p.original.storage
<django.core.files.storage.DefaultStorage object at 0x1016f7c10>
>>> default_storage._setup()
>>> print default_storage._wrapped
<storages.backends.s3boto.S3BotoStorage object at 0x101ddd8d0>
>>> p.original.storage
<django.core.files.storage.DefaultStorage object at 0x1016f7c10>
>>>
我该如何让我的模型字段变成S3BotoStorage类型呢?
1 个回答
4
根据我对Django存储的理解,存储类通常会是DefaultStorage,除非你在模型中明确设置了其他的存储类。你可以看看
p.original.storage._wrapped
的内容,试试看打印一下这个。从我的角度来看,我得到的结果和你一样,但如果我打印
p.original.storage._wrapped
,我会看到我自定义的存储类(在我的情况下是这样)。如果你想确保你的字段使用的是正确的存储方式,你也可以直接在模型中设置存储。例如:
from l3i.shortcuts.storage import UniqueFileStorage
class TestModel(models.Model):
file = models.FileField(upload_to='file', storage=UniqueFileStorage())
在这种情况下,你可以使用p.file.storage
,这样你就能得到你自定义的类,而不是DefaultStorage的包装类。