[英]Custom S3BotoStorage class constructor error
我正在尝试基于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
我根据我的答案指出s3boto中的多个S3存储桶 ,它应该不工作? 通常情况下,我们可以这样做:
obj1 = models.FileField(storage=S3BotoStorage(bucket='bucket_1'), upload_to=custom_upload_to)
它的工作原理。 (并将参数传递给构造函数)
你正在调用错误的init函数! 你的意思是打电话给父母,但你要打电话给父母的父母。 你需要改变你的super()行:
super(S3BotoStorage, self).__init__(*args, **kwargs)
至:
super(customStorage, self).__init__(*args, **kwargs)
通常,super()命令接受当前对象以及要调用其父级的类。 这很重要,因为有时候某人确实想要呼叫父母的父母。 这是允许的,因为在需要时仍可以将子对象视为父对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.