2012-10-10 6 views
5

は、私は次のモデルを持っている想像:モデルのDjangoで出現数+カウントを取得しますか?

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

どのように空の名前を無視して、私は、自分のカウントで、出現の順に、最も人気のある名前の配列を返すリクエストを書くことについては行くだろうか?

13のレズリー、8 Andys、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) 

しかし、それはかなりまだありません私が望むもの

答えて

10

は、いくつかの掘削後、ついに見つけた:

Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c') 
+2

あなたはまた ' – okm

+0

がどのようにこのクエリにいくつかのフィルタを適用するには、' .exclude(optional_first_name = '')したいのでしょうか? 'A'で始まる名前のようなフィルターのみの名前 –

関連する問題