Пользовательский сигнал Django подключен, но метод не запускается .. как исправить? - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть пользовательский подключенный сигнал, который не запускается:

код в модели конкурса в методе add_participant:

            # 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 ]

2 голосов
/ 12 декабря 2011

При отправке отправителя kwarg должен быть класс Contest, а не экземпляр Contest. Проверка:

contest_after_added_participant.send(sender=Contest, 
                                 participant=participant, 
                                 participation=participation)
1 голос
/ 12 декабря 2011

Ваша ошибка в том, что вы вызываете .connect () с аргументом "отправитель", который является Contest class , а .send () вызывается, с другой стороны, с экземпляром Contest instance , поэтому они не совпадают.Если у вас есть только один прослушиватель для вашего пользовательского сигнала, и вам не нужно фильтровать сигналы, отправленные определенными отправителями, как описано здесь: https://docs.djangoproject.com/en/dev/topics/signals/#connecting-to-signals-sent-by-specific-senders,, тогда вы также можете удалить аргумент "sender" из вашего вызова .connect ():

contest_after_added_participant.connect(my_callback, dispatch_uid='Contest.001')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...