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

السؤال

نشر

لدي نموذجين Models في متجر بسيط مبني بإستخدام جانغو Django على الشكل التالي:

class Tag(models.Model):
    name = models.CharField(max_length=255)

class Product(models.Model):
    name = models.CharField(max_length=255)
    tag = models.ForeignKey(Tag)

كما يظهر من الكود فإن كل منتج لديه وسم tag

حاولت أن أقوم بحساب عدد المنتجات في كل وسم ولكن لم أستطع القيام بهذا الأمر، أريد أن أقوم بتنفيذ شيء مشابهة لجملة SQL التالية:

select tag_id, count(id) from product group by tag_id;

كيف أقوم بهذا الأمر في جانغو Django؟

Recommended Posts

  • 1
نشر

لحساب عدد المنتجات في كل وسم (Tag) نقوم بالدمج بين الدوال التالية:

  • Count: التي تقومُ بحساب المنتجات في كل وسم
  • annotate: التي تقوم بإنشاء حقل جديد للنتيجة. (الحقل الذي سوف نضيفه هو count).
  • values: لتحديد حقول معينة من الكائنات في النتيجة النهائية.
from django.db.models import Count # نستدعي الدالة Count
result = Product.objects
    .values('tag')                 # نحدد الحقول التي ستظهر في النتيجة النهائية
    .annotate(count=Count('tag'))   # نقوم بإنشاء حقل جديد  count
    .order_by()

النتيجة سوف تكون مماثلة لجملة ال SQL التالية:

SELECT tag_id, COUNT(tag_id) AS count
FROM product GROUP BY tag_id

النتيجة النهائية سوف تكون على الشكل:

[{'tag': 'tag1', 'count': 12},  {'tag': 'tag2', 'count': 20}, ....]

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...