簡體   English   中英

Django中的自定義默認文件存儲

[英]Custom default file storage in 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類型?

根據我對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包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM