在Django中按外键分组为

问题描述:

我有一个模型,其中有一个ForeignKeyIntegerField在Django中按外键分组为

我想总结由外键分组的整数字段,但外键可以有很多值。我只想知道外键是“真实值”还是没有。所以外键应该被解释为布尔值。

我可以做两个查询:

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

如果可能的话?

您的第二个选项无效,因为您需要在查询值之前过滤查询集并指定要调用的注释。至于将外键作为布尔值来处理,您正在寻找isnull。所以,你喜欢的东西结束:

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

您可以随时使用.extra,像这样:

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

看到docs for more examples