Django - 为关键字参数'sender'发出多个值

时间:2011-02-15 09:21:06

标签: django

def pre_save(self, model_instance, add):
        value = super(MediaUploadField, self).pre_save(model_instance, add)
        if value and add:
            post_save.connect(self.someCallback, sender=model_instance.__class__, dispatch_uid='media_attachment_signal')
        return value

    def someCallback(sender, **kwargs):
        print "callback"
        print sender
        return

抛出以下错误:

someCallback() got multiple values for keyword argument 'sender'

老实说,我无法弄清楚我做错了什么,我准确地遵循了文档。我尝试用实际的类导入替换model_instance。 class ,但它会抛出相同的错误。

我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:4)

someCallback似乎是一种模型方法。模型方法的第一个参数始终是实例本身 - 通常称为self。但是你调用了第一个参数sender - 所以Python试图接收sender作为第一个位置参数,并作为关键字参数之一。

解决此问题的最佳方法是将someCallback定义为静态方法,因为它们不接受实例或类:

@staticmethod
def someCallback(sender, **kwargs):

另请注意,在pre_save方法中连接post_save处理程序是一件非常奇怪的事情。不要忘记连接信号是永久性的 - 它不是基于每个呼叫完成的事情。