Django — Signals
What are Signals?
Signals allow certain senders to notify a set of receivers when some action has taken place.
Built-in Signals
| Signal | Sender | Description |
|---|---|---|
| pre_save | Model | Before save |
| post_save | Model | After save |
| pre_delete | Model | Before delete |
| post_delete | Model | After delete |
| m2m_changed | ManyToMany | M2M field changed |
Basic Signal
# blog/signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
Connect Signals
# blog/apps.py
class BlogConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'blog'
def ready(self):
import blog.signals
Custom Signals
from django.dispatch import Signal
order_completed = Signal()
# Send signal
order_completed.send(sender=Order, order=order)
# Receive signal
@receiver(order_completed)
def send_confirmation(sender, order, **kwargs):
send_mail('Order confirmed', 'Your order is ready', ...)
Mini Practice
- Create a post_save signal
- Connect signals in apps.py
- Create a custom signal
- Use signals for auditing
Up Next
Continue with Testing — writing tests in Django.
Related Topics
Frequently Asked Questions about Signals
What is Signals in Django?
Signals is a fundamental concept in Django. This lesson explains it step by step with clear examples, making it easy for beginners to understand.
How do I learn Signals?
Start by reading the explanation above, then try the code examples. Practice by modifying the examples and experimenting with different values. Hands-on practice is the best way to learn Signals.
Why is Signals important in Django?
Signals is essential for Django development. Understanding this concept will help you write better code and solve real-world problems more effectively.