Signals allow certain senders to notify a set of receivers that some action has taken place so they continue
Actions :
model's save() method is called.
django.db.models.signals.pre_save | post_save
model's delete() method is called.
django.db.models.signals.pre_delete | post_delete
ManyToManyField on a model is changed.
django.db.models.signals.m2m_changed
Django starts or finishes an HTTP request.
django.core.signals.request_started | request_finished
pre_save/post_save – this Signal is used before and after the save() method.
pre_delete/post_delete -this Signal is triggered before and after a model’s instance is deleted (method delete()).
pre_init/post_init – this Signal is triggered before/after the init(,) method instantiates a model.
Using signals connect
from django.db import models
from django.db.models import signals
def create_customer(sender, instance, created, **kwargs):
print "Save is called"
class Customer(models.Model):
name = models.CharField(max_length=16)
description = models.CharField(max_length=32)
signals.post_save.connect(receiver=create_customer, sender=Customer)
Using receiver
from django.db import models
from django.db.models import signals
from django.dispatch import receiver
class Customer(models.Model):
name = models.CharField(max_length=16)
description = models.CharField(max_length=32)
@receiver(signals.pre_save, sender=Customer)
def create_customer(sender, instance, created, **kwargs):
print "customer created"
Another example
@receiver(post_save, sender=File)
def set_file_attributes(sender, instance, created, **kwargs):
if created:
new_profile = Profile.objects.create(user=instance)
new_profile.create_auth_token()
new_profile.save()