Django多次注释冲突

时间:2018-06-19 17:02:06

标签: django django-models

签出以下代码。我正在尝试获取正确值为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

1 个答案:

答案 0 :(得分:1)

尝试将Countdistinct=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()组合会产生错误   结果,因为使用联接而不是子查询。对于大多数   聚合,无法避免此问题,但是,计数   聚合有一个独特的参数可能会有所帮助。