【问题标题】:Group by foreign key as boolean in Django在Django中按外键分组为布尔值
【发布时间】:2014-08-28 15:11:11
【问题描述】:

我有一个模型,其中有一个ForeignKey 和一个IntegerField

我想对按外键分组的整数字段求和,但外键可以有很多值。我只想知道外键是否具有“真实价值”或没有。所以外键应该被解释为布尔值。

我可以做两个查询:

a = Model.objects.filter(parent=None).aggregate(Sum('amount'))
b = Model.objects.exclude(parent=None).aggregate(Sum('amount'))

但是制作类似的东西不是需要更少的内存吗

c = Model.objects.values('parent__as_bool').annotate(Sum('amount'))

如果可能?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    您始终可以使用 .extra,如下所示:

    .extra(select={'parent_is_null': "parent is NULL"})
    

    docs for more examples

    【讨论】:

      【解决方案2】:

      您的第二个选项无效,因为您需要在请求值之前过滤查询集,并指定您要调用的注释。至于将外键视为布尔值,您正在寻找isnull。所以你以这样的方式结束:

      c = Model.objects.filter(parent__isnull=False).values().annotate(amount_sum=Sum('amount'))
      

      【讨论】:

        猜你喜欢
        • 2019-06-27
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 2011-02-03
        • 2013-06-28
        • 2021-12-24
        相关资源
        最近更新 更多