在Django中按外键分组为布尔值

时间:2014-08-28 15:11:12

标签: python django django-queryset

我有一个模型,其中有ForeignKeyIntegerField

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

我可以提出两个问题:

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'))

如果有可能吗?

2 个答案:

答案 0 :(得分:0)

您的第二个选项无效,因为您需要在询问值之前过滤查询集,并指定您调用注释的内容。至于将外键作为布尔值处理,您需要查找isnull。所以你最终得到的结论是:

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

答案 1 :(得分:0)

您可以随时使用.extra,如下所示:

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

请参阅docs for more examples