从子类调用S3BotoStorage Save()方法

时间:2012-05-15 13:32:43

标签: django django-models django-storage

我正在尝试实现一个新的Storage类,它从Django-Storages继承S3BotoStorage。 (http://code.larlet.fr/django-storages/src/83fa2f0ba20c/storages/backends/s3boto.py)

每当调用我的新类的save方法时,我想做一些其他的东西,然后调用S3BotoStorage._save()方法。像这样:

class CustomStorage(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        super(CustomStorage, self).__init__(*args, **kwargs)

    def _save(self,*args, **kwargs):
        #Will do stuff there
        print >> sys.stderr, "%s" % (self.bucket)
        super(CustomStorage, self)._save(*args, **kwargs)

如果我没有这个CustomStorage._save()方法,一切都运行良好(即调用S3BotoStorage._save(名称,内容)并将所有内容上传到S3)。但是,如果我有这个新的CustomStorage.save方法,我会收到500错误。 (虽然我的错误消息出现在终端中,但它确实被调用了)。我看不到任何调用堆栈或任何东西。

我试过了:

def save(self,*args, **kwargs):
def save(self,name, content):

这些都没有奏效。

有什么想法吗?!

谢谢!

1 个答案:

答案 0 :(得分:0)

Storage._save应返回正在保存的文件的名称。您的_save没有。您应该从super电话中返回值。

class CustomStorage(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        super(CustomStorage, self).__init__(*args, **kwargs)

    def _save(self,*args, **kwargs):
        #Will do stuff there
        print >> sys.stderr, "%s" % (self.bucket)
        return super(CustomStorage, self)._save(*args, **kwargs)