【问题标题】:Custom S3BotoStorage class constructor error自定义 S3BotoStorage 类构造函数错误
【发布时间】:2012-05-15 08:22:34
【问题描述】:

我正在尝试基于 S3BotoStorage 创建一个新的自定义存储类,但我不断收到以下代码的错误:

import sys
from django.core.files.storage import Storage
from storages.backends.s3boto import S3BotoStorage


class customStorage(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket_name'] = 'bucket_1'
        print >> sys.stderr, 'Creating MyS3Storage'        
        super(S3BotoStorage, self).__init__(*args, **kwargs)

错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
self._setup()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/files/storage.py", line 285, in _setup
self._wrapped = get_storage_class()()
File "/Users/abisson/Sites/poka/common/storages/models.py", line 10, in __init__
super(S3BotoStorage, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters

我的答案基于Pointing to multiple S3 buckets in s3boto,它应该可以吗?即使是正常情况下,我们也可以这样做:

obj1 = models.FileField(storage=S3BotoStorage(bucket='bucket_1'), upload_to=custom_upload_to)

它有效。 (并将参数传递给构造函数)

【问题讨论】:

    标签: django amazon-s3 amazon-web-services django-storage


    【解决方案1】:

    你调用了错误的初始化函数!你的意思是打电话给父母,但你打电话给父母的父母。您需要从以下位置更改您的 super() 行:

    super(S3BotoStorage, self).__init__(*args, **kwargs)
    

    到:

    super(customStorage, self).__init__(*args, **kwargs)
    

    一般来说,super() 命令获取当前对象和您要调用的父对象的类。这很重要,因为有时一个人确实想打电话给父母的父母。这是允许的,因为子对象在需要时仍可被视为父对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2014-08-12
      相关资源
      最近更新 更多