Search code examples
pythondjangosignals

Registering Multiple Signals in Django


I'm trying to register multiple signals on one model. It seems that as I register an additional signal, it removes the previous signal.

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"

I've taken a look around the docs, but I keep finding details on how to create custom signals in a class formate. Not how to register in class format.

I would imagine I can do something like this:

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

Thanks for your help in advance.


Solution

  • You are (probably unintentionally) redefining ResourceSaved. Try this instead:

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