0Pricing
Django Academy · Урок

Сигналы post_save и pre_delete

Запускайте код при изменении моделей

«Сигналы post_save и pre_delete» — бесплатный урок Django Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Signals in a Sentence

A signal lets one part of Django announce that something happened, so other code can react without being directly called. 

Why React to Events

Sometimes you want side effects when a model changes, like sending a welcome email after signup. Signals keep that reaction out of your save logic.

The post_save Signal

The post_save signal fires right after a model instance is written to the database, so you know the row already exists.

A post_save Receiver

You write a function and tell Django to call it when post_save fires. The receiver gets the saved instance through its arguments.

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Profile)
def on_save(sender, instance, **kwargs):
    print("saved", instance)

The created Flag

post_save passes a created boolean: True on a brand-new row, False on an update. Use it to run code only on first creation.

def on_save(sender, instance, created, **kwargs):
    if created:
        print("new", instance)

The pre_delete Signal

The pre_delete signal fires just before a row is removed, so the instance still exists when your code runs.

A pre_delete Receiver

Use pre_delete to clean up related resources, like a file, before the database row vanishes. The instance is still fully available.

from django.db.models.signals import pre_delete

@receiver(pre_delete, sender=Photo)
def clean_up(sender, instance, **kwargs):
    instance.image.delete(save=False)

pre_save and post_delete Too

Django also ships pre_save and post_delete. Together they cover the moments just before and after each write or delete.

The sender Argument

The sender tells you which model class triggered the signal. Pass sender= to a receiver so it only listens to one model.

Always Accept kwargs

Every receiver should accept **kwargs. Django may pass extra arguments, and missing them raises an error when the signal fires.

Decouple, Don't Bury Logic

Signals shine for cross-cutting reactions, but heavy logic can become hard to trace. Reach for a signal when the reaction is truly separate.

Quick Check

Test how post_save tells new rows apart from updates.

Recap: Reacting to Model Events

You met Django signals: post_save fires after writes with a created flag, pre_delete fires before removals, and every receiver should accept **kwargs. ✅

Часто задаваемые вопросы

Урок «Сигналы post_save и pre_delete» бесплатный?

Да — полный текст урока «Сигналы post_save и pre_delete» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сигналы post_save и pre_delete»?

Запускайте код при изменении моделей Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Django Academy?

Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Сигналы post_save и pre_delete»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Django Academy?

Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сигналы post_save и pre_delete
  2. Правильное подключение обработчиков
  3. Написание собственного промежуточного ПО
  4. Порядок промежуточного ПО и process_view
← Назад к Django Academy