签出以下代码。我正在尝试获取正确值为1的area_count
批注,但是如果我将data_count
批注添加到
queryset area_count
搞砸了。
>> factors_qs=Factor.objects.annotate(
area_count=Count('change__areas'),
evaluation_count=Count('factor_datas__evaluation'),
)
>> factors_qs.get(pk=1017).area_count
>> 1
>> factors_qs=Factor.objects.annotate(
data_count=Count('sets__elements__datas'),
area_count=Count('change__areas'),
evaluation_count=Count('factor_datas__evaluation'),
)
>> factors_qs.get(pk=1017).area_count
>> 4615
答案 0 :(得分:1)
尝试将Count
与distinct=True
参数一起使用:
factors_qs=Factor.objects.annotate(
data_count=Count('sets__elements__datas', distinct=True),
area_count=Count('change__areas', distinct=True),
evaluation_count=Count('factor_datas__evaluation', distinct=True),
)
来自docs:
将多个聚合与anateate()组合会产生错误 结果,因为使用联接而不是子查询。对于大多数 聚合,无法避免此问题,但是,计数 聚合有一个独特的参数可能会有所帮助。