次のように、人々のリスニング習慣(Last.fmに少し似ています)を記録するDjangoモデルがいくつかあります。
class Artist(models.Model):
name = models.CharField()
class Song(models.Model):
artist = models.ForeignKey(Artist)
title = models.CharField()
class SongPlay(models.Model):
song = models.ForeignKey(Song)
user = models.ForeignKey(User)
time = models.DateTimeField()
class User(models.Model):
# doesn't really matter!
過去1か月に聴いたトップソングを表示できるユーザーページが欲しいのですが。これを行うための最良の方法は何ですか?
私がこれまでに思いついた最高のものは次のとおりです。
SongPlay.past_month
.filter(user=user)
.values('song__title', 'song__id', 'song__artist__name')
.annotate(plays=Count('song'))
.order_by('-plays')[:20]
上past_month
は先月のプレイをフィルタリングするだけのマネージャーです。user
フィルタリングするための正しいオブジェクトもすでにあると仮定します。
私の2つの質問は次のとおりです。
plays
元のオブジェクトと注釈にアクセスするにはどうすればよいですか?
これは、私がに渡すものに基づいて、特定の値を与えるだけですvalues
。元のオブジェクトにアクセスしたいのですが、モデルには呼び出したいメソッドがあります。SongPlay
からにグループ化するにはどうすればよいArtist
ですか? アーティストのチャートと曲のチャートを見せたいのですが。