Регистрация нескольких сигналов в Django - PullRequest
5 голосов
/ 07 мая 2011

Я пытаюсь зарегистрировать несколько сигналов на одной модели.Кажется, что когда я регистрирую дополнительный сигнал, он удаляет предыдущий сигнал.

from django.dispatch import receiver
from django.db.models.signals import post_save,post_delete
from my.app.models import Resource


@receiver(post_save,sender=Resource)
def ResourceSaved(sender,**kwargs):
    print "Saved"

@receiver(post_delete,sender=Resource)
def ResourceSaved(sender,**kwargs):
    print "Deleted"

Я просмотрел документы, но продолжаю находить подробности о том, как создавать пользовательские сигналы в формате классов.Не как зарегистрироваться в формате класса.

Я бы подумал, что могу сделать что-то вроде этого:

@reciver(sender=Resource)
class SignalAnsweringMachine(object):
    def post_delete(self,**kwargs):
        print "delete"
    def post_save(self,**kwargs):
        print "save"

Спасибо за вашу помощь заранее.

Ответы [ 3 ]

11 голосов
/ 07 мая 2011

Вы (возможно, непреднамеренно) переопределяете ResourceSaved.Попробуйте вместо этого:

@receiver(post_save,sender=Resource)
def ResourceSaved(sender,**kwargs):
    print "Saved"

@receiver(post_delete,sender=Resource)
def ResourceDeleted(sender,**kwargs):
    print "Deleted"
6 голосов
/ 02 октября 2013

Я использую эту короткую форму для регистрации двух или более обработчиков.

В моем случае я очищаю список кэшированных категорий.

from django.dispatch import receiver
from django.db.models.signals import post_save, post_delete
from ..models import Category

all_categories = []

# Post save handler for Category model to clear "all_categores" variable
@receiver(post_save, sender=Category)
@receiver(post_delete, sender=Category)
def post_save_category(sender, **kwargs):
    # clean cached categories
    global all_categories
    all_categories = []
0 голосов
/ 05 мая 2019

Теперь вы можете использовать следующий синтаксис в вашем приемнике сигнала:

@receiver([post_save, post_delete],sender=Resource)
def ResourceSaved(sender,**kwargs):
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...