Version 7 (modified by alang@…, 9 years ago) (diff)

One extra example

What Are Signals?

Signals allow you to make Django call custom methods after common actions using a dispatcher. Beyond that, I really don't know much else. Please help expand this documentation, if you can.

The author of Zyons talks about signals a bit here.

Built-In Signals

Django has the following build in signalers:

  • class_prepared
  • pre_init
  • post_init
  • pre_save
  • post_save
  • pre_delete
  • post_delete
  • post_syncdb

All the above are related to classes in your files.

Custom Signals

You can send custom signals from the dispatcher, as well. In the following example from this intro to signals, a signal called "object_viewed" is sent whenever the following bit is called:

dispatcher.send(signal=signals.object_viewed, request=request, object=object)

You'll have to instantiate the signal in a file called "" in your app's folder:


And then, in any file in which you use that signal (typically, and, you'll need to import your signals file:

from import signals


The following is taken from Zyons, the only place I've seen signals used so far. Unless I'm completely incorrect, the following code has the dispatcher call "increment_tag_summary" before a TagUserObject object is saved, and "decrement_tag_summary" after a TagUserObject object is deleted.

from django.db.models import signals
from django.dispatch import dispatcher


def increment_tag_summary(sender, instance, signal, *args, **kwargs):

def decrement_tag_summary(sender, instance, signal, *args, **kwargs):

dispatcher.connect( increment_tag_summary , signal=signals.pre_save, sender=TagUserObject )
dispatcher.connect( decrement_tag_summary , signal=signals.post_delete, sender=TagUserObject )

Other examples

Back to Top