📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Django Framework Django Signals

Django Signals

5 min read
Trigger decoupled side effects with post_save and pre_delete signals.

Django Signals

from django.db.models.signals import post_save, pre_delete, m2m_changed
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=Post)
def notify_followers(sender, instance, created, **kwargs):
    if created and not instance.is_draft:
        for follower in instance.author.followers.all():
            Notification.objects.create(
                user    = follower,
                message = str(instance.author) + " published: " + instance.title
            )

@receiver(pre_delete, sender=Post)
def cleanup_files(sender, instance, **kwargs):
    if instance.image:
        instance.image.delete(save=False)

# Connect explicitly (when you cannot use decorator)
post_save.connect(create_user_profile, sender=User)