django统计一个字段但是另一个字段

时间:2015-07-23 01:41:06

标签: python mysql sql django

所以我使用django和mysql,我有一个模型MyModel,其中包含None字段上region的一些项目。当我运行时:

results = MyModel.objects.all()\
        .values('region')\
        .annotate(total=Count('region'))

它正确地返回分组,但其中一个是{'None': 0},这是不正确的,因为有些region字段的项目等于None

现在,如果我使用mysql,那么我可以将其分组:

select region, count(id) from model_table group by region;

返回我想要的解决方案| NULL | 5 |

我如何从django实现这一目标?

1 个答案:

答案 0 :(得分:1)

你实际上已经在你的问题中写了答案。据我所知,SQL中的COUNT排除了某些假值,如NULL。因此,如果您还要计算falsey值,则使用另一个字段来执行聚合,就像您在SQL语句中使用' id'领域。在这方面,您需要做的就是在' id'上执行COUNT。将您的代码更改为以下内容:

results = MyModel.objects.all()\
    .values('region')\
    .annotate(total=Count('id'))