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

السؤال

نشر

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

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

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

Recommended Posts

  • 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 ) و غيرها من الأدوات لتسهيل تنفيذ الإشارات في حال حدوث أي تغيير في العلاقة

  • 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:
		# هنا نضع الأكواد التي نُريد تشغيلها عندما يتم إنشاء
        # كائن جديد
        

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...