[英]Django count related objects
如何计算Django中的相关对象(少于N个查询,其中N是对象的数量)。
为了澄清,假设我有表A和表B. 每个B都连接到一个A. 方法我试过:
A.objects.select_related().filter(attr=val)
A[i].B_set.count()
当然,对于每个A [i]我想找出B对象的数量Django执行一个查询。
所以问题是 - 有没有办法优化它?
我还没有尝试执行多少查询,但Django方式应该使用annotate()
。 例如:
from django.db.models import Count
q = A.objects.select_related('B').annotate(num_B=Count('B'))
print A[0].num_B
我必须回答我自己的问题:)如果A的对象被查询如下:
A.objects.select_related().filter(atrr=val).annotate(n_b=models.Count('B'))
这会创建非常长的查询,但至少只有一个。
由于Django 2.0 Count()
聚合函数接受filter
参数 ,因此允许对相关对象queryset应用其他限制。 像这样工作:
A.objects.select_related().annotate(
total=models.Count('myrelated__pk', filter=Q(only_items='that-i-need'))
).all()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.