首页 > 解决方案 > 带有 Case 的 Django QuerySet 注释似乎是误报

问题描述

我正在尝试逐个注释 QuerySet,但我得到的所有结果都是正面的 (1),而它们应该都是负面的 (0)。

过滤器看起来像这样

    related_params[distro.id] = table.objects.filter(
        ProductId__in=[map["ProductId"] for map in related_maps_by_distro.values("ProductId")]).annotate(
        has_agr_param=Count(
            models.Case(
                models.When(DistributionParameterId__Code__in=[agr_parameter.Code for agr_parameter in agr_parameters], then=1),
                default=0,
                output_field=models.IntegerField(),
            )
        )
    ).order_by("DistributionParameterId__Name")

除了部分之外,一切都很好annotate

的值[agr_parameter.Code for agr_parameter in agr_parameters]

['ZARIZENI', '443', '10071', 'PC4.12', 'PC4.121', 'PC4.6', 'PC3.101', 'AIO 2.1']

而所有可能DistributionParameterId__Code的 s 是

 ['10176', '10175', '10171', '10177', '563', '10172', '10179', '829', '10174', '10173', '10170', '10178']

所以只有一个匹配 - 10071- 因此除了一个之外的所有都应该用 0 注释。我错过了什么?任何帮助,将不胜感激。

标签: djangodjango-modelsdjango-querysetdjango-filterdjango-annotate

解决方案


推荐阅读