2011-02-24 65 views
9

我正在尝试使用自定义文件存储(https://bitbucket.org/david/django-storages/wiki/S3Storage)。我也跟着中的指示,把这个在我的settings.py在Django中自定义默认文件存储

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型的还是?

+2

我有这个相同的问题,你有没有找到它的决议? – James 2011-03-25 02:39:07

回答

4

根据我对django存储的了解,存储类将始终为DefaultStorage(除非在模型中明确指定)。它应该在_wrapped类中。 您是否尝试打印“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包装。

+0

这对我有用。但是,通过django-storages示例,在模型字段中明确设置存储空间似乎不是必需的。这意味着我不能只是改变配置来切换存储方式。这似乎并没有工作,而你的答案呢!谢谢! – Guerry 2012-09-05 15:10:47