在一个模型 Django 中注释

Annotate in one model Django

查看我的模型

https://github.com/rg3915/morris/blob/master/myproject/core/models.py

如何 return 百分比 'uf' ?

示例:

'uf','quant'

'AM',8

'SP',9

'RJ',4

我试试

p=Person.objects.values('uf').annotate(quant=Count('uf', distinct=True)).values_list('uf','quant')
print(p.query)

但是return

SELECT "core_person"."uf", COUNT(DISTINCT "core_person"."uf") AS "quant" FROM "core_person" GROUP BY "core_person"."uf", "core_person"."first_name" ORDER BY "core_person"."first_name" ASC

我需要

SELECT "core_person"."uf", COUNT(DISTINCT "core_person"."uf") AS "quant" FROM "core_person" GROUP BY "core_person"."uf" ORDER BY "core_person"."uf" ASC

根据您的示例,我假设您要检索州列表和属于该州的总人数。

您的尝试非常接近,但是缺少 order_by() 可以让您选择订单字段。

因此您的查询应如下所示:

Person.objects.values('uf').annotate(quant=Count('uf')).order_by('uf').values_list('uf','quant')

我希望您会注意到我还从 Count 函数中删除了 distinct=True 参数,因为我们希望能够对所有相似的结果进行分组。