تخطَّ إلى المحتوى

annotate()

إضافة حقل محسوب لكل سجل annotate()

annotate() تضيف قيمة محسوبة (غالبًا من عدّ أو تجميع علاقة) لكل سجل بنتيجة الاستعلام على حدة.

الاستخدام الأشهر: عدّ عناصر علاقة عكسية لكل سجل بنفس استعلام SQL واحد، بدل استعلام count() منفصل لكل عنصر بحلقة (نفس مشكلة N+1).

الصياغة

from django.db.models import Count
Model.objects.annotate(computed_field=Count("related_field"))

📄 مثال

from django.db.models import Count

# عدد التعليقات لكل منشور بنفس الاستعلام
posts = Post.objects.annotate(comment_count=Count("comments"))
for post in posts:
    print(post.title, post.comment_count)  # بلا أي استعلام إضافي

أهم المعاملات

المعاملالوظيفة
computed_fieldاسم الحقل المحسوب الجديد المتاح على كل كائن بالنتيجة
Count(field)عدّ عناصر علاقة مرتبطة لكل سجل

💡 نصائح عملية

  • استخدمها بدل حلقة تستدعي .count() يدويًا على علاقة لكل سجل — تحل مشكلة N+1 تمامًا مثل prefetch_related

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DJANGO الكامل بالعربي.