Connect/Disconnect django signals

Posted: February 24th, 2010 | Author: Davo | Filed under: Django | Tags: , , , , , , | No Comments »

Django signals allow to bind a function to a specific event.

There are 4 major signals available:

  • pre_save() ( before saving )
  • post_save() ( after saving )
  • pre_delete() ( before deleting )
  • post_delete() ( after deleting )

A simple example of connecting a signal:

# in models.py
from django.db.models.signals import post_save
from myapp.models import MyModel

def do_something(sender, **kwargs):
    # the object which is saved can be accessed via kwargs 'instance' key.
    obj = kwargs['instance']
    print 'the object is now saved.'
    # ...do something else...

# here we connect a post_save signal for MyModel
# in other terms whenever an instance of MyModel is saved
# the 'do_something' function will be called.
post_save.connect(do_something, sender=MyModel)

If you need to disconnect/detach a signal:

# instead of connect() we call disconnect()
post_save.disconnect(do_something, sender=MyModel)