Introduction
The receiver decorator helps connect a function to a signal in Django. It makes your function run automatically when something happens.
Jump into concepts and practice - no test required
The receiver decorator helps connect a function to a signal in Django. It makes your function run automatically when something happens.
@receiver(signal, sender=SenderModel) def function_name(sender, instance, **kwargs): # your code here
@receiver above your function to connect it to a signal.sender argument limits the signal to a specific model or source.my_handler after MyModel is saved.from django.db.models.signals import post_save from django.dispatch import receiver from myapp.models import MyModel @receiver(post_save, sender=MyModel) def my_handler(sender, instance, **kwargs): print(f"Saved: {instance}")
migration_handler after migrations finish.from django.db.models.signals import post_migrate from django.dispatch import receiver @receiver(post_migrate) def migration_handler(sender, **kwargs): print("Migration finished!")
This example prints a message every time a Book is saved.
from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver class Book(models.Model): title = models.CharField(max_length=100) @receiver(post_save, sender=Book) def announce_book_saved(sender, instance, **kwargs): print(f"Book saved: {instance.title}")
Remember to import receiver from django.dispatch.
Signals can slow down your app if overused, so use them wisely.
The receiver decorator links a function to a Django signal.
It helps run code automatically when events happen.
Use sender to specify which model or source triggers the function.
@receiver decorator in Django?@receiver decorator@receiver decorator for the post_save signal of a model named Book?@receiver decorator takes the signal as first argument and sender=ModelName as keyword argument.sender, instance, and **kwargs.Book instance is saved?
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Book)
def notify(sender, instance, **kwargs):
print(f"Book saved: {instance.title}")
book = Book(title='Django Basics')
book.save()@receiver decorator connects notify to post_save for Book.book.save()?post_save, calling notify, which prints the book's title.from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Author)
def handle_save(instance, **kwargs):
print(f"Author saved: {instance.name}")sender, instance, and **kwargs.handle_save lacks the sender parameter, causing an error.sender parameter in function definition -> Option BUser model instance is created (not updated). How do you use the @receiver decorator with post_save to achieve this?created flag in post_savepost_save signal passes a created boolean indicating if the instance was newly created.created to run code only on creationif created: inside the receiver function to run code only when a new instance is created.