2012-05-06 5 views
1

私はS3BotoStorageオフに基づいて、新しいカスタムストレージクラスを作成しようとしていますし、私は次のコードでこのエラーを得続ける:カスタム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) 

それは動作します。 (そしてコンストラクタに引数を渡してください)

答えて

3

あなたは間違ったinit関数を呼び出しています!あなたは親を呼び出すことを意味しますが、親の親を呼び出しています。スーパー()コマンドは、現在のオブジェクトと呼び出したい親の人のクラスをとり、一般的に

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

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

へ:あなたはからあなたのスーパー()の行を変更する必要があります。これは重要なことです。なぜなら、人が実際に親の親に電話をかけたい場合があるからです。これは、必要に応じて子オブジェクトを親オブジェクトと見なすことができるため許可されています。

+0

おっと!歓声メイト! – abisson

関連する問題