اذهب إلى المحتوى

السؤال

نشر

أريد تحديد بعض العمليات (تشغيل دالة معينة) لنموذج model عند إنشائه فقط. أي شيء مثل before_create مثلًا. هل هذا ممكن؟

حاولت البحث عن حل ولكن وجدت أن توثيق جانغو Django يعرض أمثلة فقط لعمل overriding للتوابع save و delete فقط

كيف أقوم بتشغيل بعض الأكواد عند إنشاء كائن جديد من النموذج instance of model في جانغو Django؟

Recommended Posts

  • 1
نشر

يُمكنك إستخدام Django signals والتي هي عبارة عن إشارات تسمح بإرسال تنبيهات عندَ حُدوث إجراءات معينة من بين تلك الإشارات نجد:

  • post_save: تُستدعى هذه الإشارة بعد حفظ الكائن في قاعدة البيانات أي بعد حدوث الدالة save.

  • pre_save: تُستدعى هذه الإشارة قبل حفظ الكائن في قاعدة البيانات اي قبل  حدوث الدالة save.

لتشغيل الأكواد عند إنشاء كائن جديد من النموذج Model نقوم بإنشاء signal من نوع post_save:

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

@receiver(post_save, sender=Model)
def run_code(sender, instance, created, **kwargs):
	# نتحقق أولا من أن الكائن جديد
    if created:
		# هنا نضع الأكواد التي نُريد تشغيلها عندما يتم إنشاء
        # كائن جديد
        

 

  • 1
نشر

يمكنك استخدام Django Signals و هي يوجد بها العديد من الخصائص التي تسمح بإستقبال الإشارات على سبيل المثال :

عند إستقبال إشارة إنشاء مستخدم جديد في قاعدة البيانات قم بإنشاء صفحة شخصية خاصة بذلك المستخدم و ذلك يتم عن طريق استخدام أوامر الإستدعاء

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

ثم نقوم بكتابة class الصفحة الشخصية للمستخدم تتضمن بعض البيانات الاختياريه مثل الاسم , العنوان , رقم الهاتف و غيرها ثم نضع django signals بعد ال class كالآتي بالعلم أن ال class الذي وضعنا بعده نموذج الإشارات هو Profile :

@receiver(post_save , sender = User)
def create_user_profile(sender , instance , created , **kwargs ):
    if created :
        Profile.objects.create(user = instance)

فهناك العديد من الأوامر المستخدمه في نظام الإشارات في django لتتناسب مع كل فكرة يتم تطبيقها على سبيل المثال :

pre_save : تستخدم في حال الرغبة في تنفيذ شيء قبل حفظ النموذج

post_save : تستخدم في حال الرغبة في تنفيذ شيء بعد حفظ النموذج

pre_delete : تستخدم في حال الرغبة في تنفيذ شيء قبل مسحة ( قبل حذف المستخدم قم بحذف المنشورات المتعلقه به )

m2m_changed : تستخدم في تتبع التغييرات في العلاقات المتعدده مثل ManyToManyField و يوجد بها العديد من الأدوات  ( pre_add , post_add , pre_remove , post_remove , pre_clear , post_clear ) و غيرها من الأدوات لتسهيل تنفيذ الإشارات في حال حدوث أي تغيير في العلاقة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...