带有 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 都是

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)