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

كيفية عمل إستعلام GROUP BY مع ORDER BY في جانغو Django؟

Mohssen A Mohssen

السؤال

أستخدم  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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...