Bird
Raised Fist0
Djangoframework~5 mins

Receiver decorator in Django - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the purpose of the @receiver decorator in Django?
The @receiver decorator connects a function to a Django signal, so the function runs automatically when that signal is sent.
Click to reveal answer
beginner
How do you import the <code>@receiver</code> decorator in Django?
You import it with: <code>from django.dispatch import receiver</code>.
Click to reveal answer
intermediate
Explain the role of the signal argument in the @receiver(signal) decorator.
The signal argument tells Django which signal the decorated function should listen to and respond when that signal is sent.
Click to reveal answer
intermediate
What parameters does a receiver function typically accept?
A receiver function usually accepts sender, instance, and **kwargs to get details about the signal event.
Click to reveal answer
intermediate
Why is using the @receiver decorator better than manually connecting signals with signal.connect()?
The @receiver decorator makes the code cleaner and easier to read by linking the function directly to the signal in one place.
Click to reveal answer
What does the @receiver decorator do in Django?
ARuns a function immediately
BCreates a new signal
CDeletes a signal
DConnects a function to a signal
Which module do you import @receiver from?
Adjango.models
Bdjango.signals
Cdjango.dispatch
Ddjango.utils
What argument do you pass to the @receiver decorator?
AThe signal to listen for
BThe sender class
CThe function name
DThe model name
Which of these is NOT a typical parameter of a receiver function?
Arequest
Binstance
Csender
D**kwargs
Why use the @receiver decorator instead of signal.connect()?
AIt runs the function faster
BIt makes code cleaner and easier to read
CIt disables the signal
DIt automatically deletes the function
Describe how the @receiver decorator works in Django and why it is useful.
Think about how Django signals notify parts of your app and how the decorator helps handle that.
You got /4 concepts.
    Explain the typical parameters a receiver function accepts and what information they provide.
    Consider what details the function needs to respond properly to the signal.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the @receiver decorator in Django?
      easy
      A. To register a template filter
      B. To create a new database model
      C. To connect a function to a signal so it runs automatically when the signal is sent
      D. To define a URL route in Django

      Solution

      1. Step 1: Understand what signals do in Django

        Signals notify parts of your app when something happens, like saving a model.
      2. Step 2: Role of the @receiver decorator

        The decorator links a function to a signal so it runs automatically when the signal is sent.
      3. Final Answer:

        To connect a function to a signal so it runs automatically when the signal is sent -> Option C
      4. Quick Check:

        Receiver decorator connects functions to signals = D [OK]
      Hint: Receiver links functions to signals for automatic execution [OK]
      Common Mistakes:
      • Confusing receiver with model or URL definitions
      • Thinking receiver creates models or templates
      • Mixing up signals with URL routing
      2. Which of the following is the correct syntax to use the @receiver decorator for the post_save signal of a model named Book?
      easy
      A. @receiver(post_save, sender=Book) def my_handler(sender, instance, **kwargs): pass
      B. @receiver(post_save(Book)) def my_handler(sender, instance, **kwargs): pass
      C. @receiver(sender=Book, post_save) def my_handler(sender, instance, **kwargs): pass
      D. @receiver(post_save) def my_handler(Book, instance, **kwargs): pass

      Solution

      1. Step 1: Check the correct decorator syntax

        The @receiver decorator takes the signal as first argument and sender=ModelName as keyword argument.
      2. Step 2: Match the correct function signature

        The handler function must accept sender, instance, and **kwargs.
      3. Final Answer:

        @receiver(post_save, sender=Book) def my_handler(sender, instance, **kwargs): pass -> Option A
      4. Quick Check:

        Correct decorator syntax = C [OK]
      Hint: Use @receiver(signal, sender=Model) syntax [OK]
      Common Mistakes:
      • Passing sender as positional argument
      • Incorrect function parameters
      • Missing sender keyword argument
      3. Given this code snippet, what will be printed when a 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()
      medium
      A. Book saved: None
      B. Error: receiver not connected
      C. No output printed
      D. Book saved: Django Basics

      Solution

      1. Step 1: Understand the signal connection

        The @receiver decorator connects notify to post_save for Book.
      2. Step 2: What happens on book.save()?

        Saving the book triggers post_save, calling notify, which prints the book's title.
      3. Final Answer:

        Book saved: Django Basics -> Option D
      4. Quick Check:

        post_save triggers print with instance title = B [OK]
      Hint: post_save calls receiver printing instance data [OK]
      Common Mistakes:
      • Assuming no output without explicit call
      • Confusing instance attribute access
      • Thinking receiver needs manual call
      4. Identify the error in this signal receiver code:
      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}")
      medium
      A. Incorrect decorator usage, should not use sender
      B. Missing sender parameter in function definition
      C. Function name must be post_save_handler
      D. No error, code is correct

      Solution

      1. Step 1: Check function parameters for signal handlers

        Signal handlers must accept sender, instance, and **kwargs.
      2. Step 2: Identify missing parameter

        The function handle_save lacks the sender parameter, causing an error.
      3. Final Answer:

        Missing sender parameter in function definition -> Option B
      4. Quick Check:

        Signal handler must have sender parameter = A [OK]
      Hint: Signal handlers need sender, instance, **kwargs parameters [OK]
      Common Mistakes:
      • Omitting sender parameter
      • Wrong function signature order
      • Assuming function name matters
      5. You want to run a function only when a User model instance is created (not updated). How do you use the @receiver decorator with post_save to achieve this?
      hard
      A. @receiver(post_save, sender=User) def user_created(sender, instance, created, **kwargs): if created: print('New user created')
      B. @receiver(post_save, sender=User) def user_created(sender, instance, **kwargs): print('New user created')
      C. @receiver(post_save, sender=User) def user_created(sender, instance, created=False, **kwargs): if created == False: print('New user created')
      D. @receiver(post_save, sender=User) def user_created(sender, instance, **kwargs): if not created: print('New user created')

      Solution

      1. Step 1: Understand the created flag in post_save

        The post_save signal passes a created boolean indicating if the instance was newly created.
      2. Step 2: Use created to run code only on creation

        Check if created: inside the receiver function to run code only when a new instance is created.
      3. Final Answer:

        @receiver(post_save, sender=User) def user_created(sender, instance, created, **kwargs): if created: print('New user created') -> Option A
      4. Quick Check:

        Use created flag in post_save receiver = A [OK]
      Hint: Check 'created' flag in post_save receiver to detect new instances [OK]
      Common Mistakes:
      • Ignoring the created parameter
      • Checking created incorrectly
      • Missing created parameter in function