我有这些模型:
class Project(models.Model):
title=models.CharField(max_length=80)
date_created=models.DateTimeField(auto_now_add=True)
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 属性订购此产品?
执行此操作的正确方法是注解 https://docs.djangoproject.com/en/dev/topics/db/aggregation/。这会将数据库查询量减少到 1,并且排序将变得简单order_by
功能:
from django.db.models import Count
cat_list = Category.objects.annotate(count=Count('project_set__id')).order_by('count')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)