2011-02-24 62 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