11

次のモデルがあるとします。

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

空の名前を無視して、最も人気のある名前の配列を出現順に返し、その数を返すリクエストを作成するにはどうすればよいでしょうか?

つまり、レスリーが 13 人、アンディが 8 人、エイプリルが 3 人、ロンが 1 人、名前を特定していない 18 人が含まれるデータベースの場合、出力は次のようになります。

[('レスリー', 13), ('アンディ', 8), ('4月', 3), ('ロン', 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 に答える