2012-03-02 17 views
0

ジャンゴで別の「ステップ」でありのForeignKeyは、私はこのようなモデルでアプリを持っています最も演奏されたアーティスト。 DjangoのORMを使用してGROUP BYCOUNTをこのようにするにはどうすればよいですか?トップを取得するのForeignKeyによってグループ化、離れ

SongPlay.objects.values('song__artist__id', 'song__artist__name') 
    .annotate(Count('song__artist')).order_by('-song__artist__count')[:10] 

...:

瞬間、私はこのような何かやっている:トップ10曲を取得するには...

SongPlay.objects.values('song__id', 'song__artist__name', 'song__title') 
    .annotate(Count('song')).order_by('-song__count')[:10] 

を、この10人のアーティスト。

これを実現する簡単な方法はありますか?私はvaluesを指定するのは本当に好きではなく、むしろ(song_object, count)(artist_object, count)の行に沿ってタプルを得るでしょう。

私は見逃したことがありますか?ありがとう!

答えて

1

最後に取得したいオブジェクトからクエリを作成する必要があります。

Artist.objects.annotate(played=Count('song__songplay')).order_by('-played')[:10] 
Song.objects.annotate(played=Count('songplay')).order_by('-played')[:10] 

クエリがはるかに明確になります。

+0

これはまさに私が探しているものです。ありがとうございます。私は、あなたが 'song__songplay'のような関係の中で' Count 'できることを理解していませんでした! –

関連する問題