2011-12-11 45 views
0

我具有不运行定制连接的信号:在竞赛模型的方法中add_participantDjango自定义连接信号发送但方法不运行..如何解决?

代码:

  # this is called and no error happens 
      contest_after_added_participant.send(sender=self, 
              participant=participant, 
              participation=participation) 

代码文件中的该竞赛模型存在:

def my_callback(sender, **kwargs): 
    sender.title += 'sss' # this is never called 

contest_after_added_participant = Signal(providing_args=["participant", "participation"]) 
contest_after_added_participant.connect(my_callback, sender=Contest, dispatch_uid='Contest.001') 

回答

2

当发送发送者kwarg应该是类比赛而不是比赛的实例。检查:

contest_after_added_participant.send(sender=Contest, 
           participant=participant, 
           participation=participation) 
+0

谢谢,我会试试看。然后我认为这个文档有问题:https://docs.djangoproject.com/en/dev/topics/signals/#connecting-to-signals-sent-by-specific-senders - “pizza_done.send(sender = self,toppings = toppings,size = size)“;他们正在发送一个实例。 –

+0

您可以使用实例作为发送者发送信号,但在这种情况下,信号应连接到实例。是的,你的权利,他们没有显示任何信号使用的完整例子。 – Ilya

1

你的错误就在于,你打电话.connect()与“发件人”的说法是一个竞赛和。发送()被调用,而另一方面,具有竞赛实例 ,所以他们不匹配。如果您只有一个您的自定义信号侦听器,并且不需要过滤特定发件人发送的信号,如下所述:https://docs.djangoproject.com/en/dev/topics/signals/#connecting-to-signals-sent-by-specific-senders,那么您可以从.connect()调用中删除“发件人”参数:

contest_after_added_participant.connect(my_callback, dispatch_uid='Contest.001') 
+0

谢谢,我会尝试。然后我认为文档有问题:docs.djangoproject.com/en/dev/topics/signals/... - “pizza_done.send(sender = self,toppings = toppings,size = size)”;他们正在发送一个实例。 –

+1

不,在“发件人”参数中发送实例是完全可以的。如果您只想接收某个特定实例的信号,则可以将该实例(即具有相同主键的实例)作为“发送者”参数传递给.connect调用。 –

相关问题