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

السؤال

نشر

أستخدم  transaction model في مشروع جانغو لأعرف كل الأحداث التي تحدث على الخادم:
 

class Transaction(models.Model):
    author = models.ForeignKey(User, related_name="author")
    articles = models.ForeignKey(User, related_name="articles", null=True, blank=True)
    action_id = models.IntegerField() 
    # ...

أحاول أن أحصل على أعلى 5 كُتاب من خلال النموذج السابق، أي ما يساوي الإستعلام التالي في SQL:

SELECT author, COUNT(*) as total FROM Transaction 
GROUP BY author ORDER BY total DESC

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

Recommended Posts

  • 1
نشر

للحصول على أعلى 5 كُتاب من خلال نموذج Transaction ما عليك إلا استعمال:

from django.db.models import Count#نقوم باستيراد النموذج Count
Transaction.objects.values('author')
			.annotate(total=Count('author'))
  			.order_by('-total')[:5]

الشرح:

  • نستخدم عادة values لحصر الأعمدة التي يتم إرجاعها في مجموعة النتائج، في مثالنا قمنا فقط باسترجاع العمود author.
  •  لإضافة عمود آخر للكائن الموجود في الQuerySet نقوم باستعمال annotate. في مثالنا قمنا بإضافة Count('author') وسميناه total.
  • بعدها قمنا بترتيب ال QuerySet من الأكبر إلى الأصغر باستخدام order_by('-total').
  • للحصول على أعلى 5 كتاب فقط ماعلينا الا استخدام [:5]. 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...