Django按计数排序

12

我有这些模型:

 class Project(models.Model):
   title=models.CharField(max_length=80)date_created=models.DateTimeField(auto_now_add=True)e)
    category = models.ForeignKey(Category)

class Category(models.Model):
    name = models.CharField(max_length=80)

并且在视图中:

cat_list = Category.objects.order_by(order_by)
for c in cat_list:
    count = Project.objects.filter(category__id=c.id).count()
    setattr(c, 'count', count)
如何通过COUNT属性对此进行排序?
1个回答

26

正确的方法是使用注释。这将减少数据库查询次数到1,并且排序将变得简单,只需使用order_by函数:

from django.db.models import Count

cat_list = Category.objects.annotate(count=Count('project_set__id')).order_by('count')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接