2012-05-06 1 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