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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إشارات post_save وpre_delete
  2. ربط المستقبِلات بطريقة صحيحة
  3. كتابة Middleware مخصص
  4. ترتيب Middleware وprocess_view
← العودة إلى Django Academy