如何计算Django中的相关对象(少于N个查询,其中N是对象的数量).
为了澄清,让我们说我有表一个和乙.每乙连接到恰好一个甲.方法我试过:
A.objects.select_related().filter(attr=val)
A[i].B_set.count()
Run Code Online (Sandbox Code Playgroud)
当然,对于每个A [i]我想找出B对象的数量Django执行一个查询.
所以问题是 - 有没有办法优化它?
Ber*_*ant 11
我没有尝试执行多少查询,但Django方式应该使用annotate().例如:
from django.db.models import Count
q = A.objects.select_related('B').annotate(num_B=Count('B'))
print A[0].num_B
Run Code Online (Sandbox Code Playgroud)
由于 Django 2.0Count()聚合函数接受filter参数,这允许对相关对象查询集应用额外的限制。工作原理如下:
A.objects.select_related().annotate(
total=models.Count('myrelated__pk', filter=Q(only_items='that-i-need'))
).all()
Run Code Online (Sandbox Code Playgroud)
我必须回答我自己的问题 :) 如果 A 的对象被这样查询:
A.objects.select_related().filter(atrr=val).annotate(n_b=models.Count('B'))
Run Code Online (Sandbox Code Playgroud)
这会创建很长的查询,但至少只有一个。
| 归档时间: |
|
| 查看次数: |
5595 次 |
| 最近记录: |