2011-02-24 21 views
9

Özel bir dosya deposu kullanmaya çalışıyorum (https://bitbucket.org/david/django-storages/wiki/S3Storage). Ben yönergeleri takip ve ben default_storage içe gittiğinizde benim settings.pyDjango'da özel varsayılan dosya depolama alanı

DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage' 

bu koymak, bu tip S3BotoStorage ait değil. Çağrıyı _setup() yapmak zorundayım. Bunu zaman, benim modelin alan

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> 
>>> 

nasıl modelin alan S3BotoStorage türünde olabilir DefaultStorage Çeşidi hala?

+2

Aynı sorunu yaşıyorum, hiç bir çözüm buldunuz mu? – James

cevap

4

Django depolarını anladığım kadarıyla, depolama sınıfı her zaman DefaultStorage (modelde açıkça ayarlamadığınız sürece) olacaktır. Bakması gereken _wrapped sınıfında. "p.original.storage._wrapped" yazdı mı?

Benim tarafımdan aynı sonuçları alıyorum, ancak p.original.storage._wrapped dosyasını yazdırırsam, özel depolama sınıfımı alırım (benim durumumda).

Bulunduğunuz bölgeye doğru depolamanın yapıldığından emin olmak istiyorsanız, depolama alanını doğrudan modele de ayarlayabilirsiniz. Örneğin :

from l3i.shortcuts.storage import UniqueFileStorage 
class TestModel(models.Model): 
    file = models.FileField(upload_to='file', storage=UniqueFileStorage()) 

Bu durumda, sen p.file.storage yapabilirsiniz ve size özel sınıf yerine DefaultStorage sarmalayıcı alacak.

+0

Bu benim için çalıştı. Bununla birlikte, django depoları örnekleriyle, depolama alanını model alanına açıkça yerleştirmek gerekli görünmemelidir. Bu, depolama yaklaşımlarını değiştirmek için yalnızca yapılandırmayı değiştiremediğim anlamına gelir. Bu işe yaramaz gibi görünüyor, ve cevabınız! Teşekkürler! – Guerry

İlgili konular