post_saveとpre_deleteシグナル
モデルが変更されたときにコードを実行します
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- post_saveとpre_deleteシグナル
- Receiverの正しい接続
- カスタムMiddlewareの作成
- Middlewareの順序とprocess_view