簡體   English   中英

自定義S3BotoStorage類構造函數錯誤

[英]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.

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