11

想象一下我有以下模型:

class Person(models.Model):
    ...other stuff...
    optional_first_name= models.CharField(max_length=50, blank=True)

我将如何编写一个请求,该请求返回一个最受欢迎的名称数组,按出现的降序排列,它们的计数,同时忽略空名称?

即对于包含 13 个 Leslies、8 个 Andys、3 个 Aprils、1 个 Ron 和 18 个未指定姓名的人的数据库,输出将是:

[('leslie', 13), ('andy', 8), ('april', 3), ('ron', 1)]

我能得到的最接近的是通过执行以下操作:

q= Person.objects.all()
q.query.group_by=['optional_first_name']
q.query.add_count_column()
q.values_list('optional_first_name', flat= True)

但这仍然不是我想要的。

4

1 回答 1

25

经过一番挖掘,终于发现:

Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c')
于 2012-10-10T04:23:13.227 回答