繁体   English   中英

Django计算相关对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM