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 ,但它会抛出相同的错误。
我的代码有什么问题吗?
答案 0 :(得分:4)
someCallback
似乎是一种模型方法。模型方法的第一个参数始终是实例本身 - 通常称为self
。但是你调用了第一个参数sender
- 所以Python试图接收sender
作为第一个位置参数,并作为关键字参数之一。
解决此问题的最佳方法是将someCallback
定义为静态方法,因为它们不接受实例或类:
@staticmethod
def someCallback(sender, **kwargs):
另请注意,在pre_save方法中连接post_save处理程序是一件非常奇怪的事情。不要忘记连接信号是永久性的 - 它不是基于每个呼叫完成的事情。