我正在尝试根据以前过滤的数据收集其他信息,例如
count(distinct batch_id) as batches,
sum(files) as files
结果受先前过滤的影响
.filter(batch_id__gte=165)
我试图克隆QuerySet并注释上面的SQL
.annotate(
batches=Count('batch_id', distinct=True),
batch_files=Sum('files')
)
但这不起作用,因为随后将SQL附加到现有的SELECT查询中
在保留WHERE部分的同时,是否有一种简单的方法来获取带有自定义SELECT部分的第二个查询?
答案 0 :(得分:0)
您可能想改为aggregate(..)
[Django-doc],例如:
result = Model.objects.filter(batch_id__gte=165).aggregate(
batches=Count('batch_id', distinct=True),
batch_files=Sum('files')
)
result
是包含两个键的字典:'batches'
和'batch_files'
分别包含Count('batch_id', distinct=True)
和Sum('files')
。
注释表示您将对整个对象 进行属性计算,而不是对整个查询集进行计算,而 aggregating 表示您将对整个(过滤后的)查询集进行计算。< / p>