【问题标题】:Custom default file storage in DjangoDjango中的自定义默认文件存储
【发布时间】:2011-04-29 09:03:20
【问题描述】:

我正在尝试使用自定义文件存储 (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 类型的?

【问题讨论】:

  • 我也遇到了同样的问题,你找到解决方法了吗?

标签: python django


【解决方案1】:

根据我对 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 包装器。

【讨论】:

  • 这对我有用。但是,通过 django-storages 示例,似乎没有必要在模型字段上显式设置存储。这意味着我不能只更改配置来切换存储方法。但这似乎不起作用,而您的答案确实有效!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2023-04-02
  • 2012-04-11
  • 1970-01-01
  • 2020-06-26
  • 2011-08-01
相关资源
最近更新 更多