Django Academy · レッスン

post_saveとpre_deleteシグナル

モデルが変更されたときにコードを実行します

レッスン 1/413 ステップ

「post_saveとpre_deleteシグナル」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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. ✅

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「post_saveとpre_deleteシグナル」レッスンは無料ですか?

はい。「post_saveとpre_deleteシグナル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。

「post_saveとpre_deleteシグナル」で何を学びますか?

モデルが変更されたときにコードを実行します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Django Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「post_saveとpre_deleteシグナル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDjango Academyレッスンでコードを書いて実行できますか?

はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. post_saveとpre_deleteシグナル
  2. Receiverの正しい接続
  3. カスタムMiddlewareの作成
  4. Middlewareの順序とprocess_view
← Django Academyに戻る