我有一些记录人们聆听习惯的 Django 模型(有点像 Last.fm),如下所示:
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!
我想要一个用户页面,我可以在其中显示他们在过去一个月里听过的热门歌曲。最好的方法是什么?
到目前为止,我想出的最好的是:
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
的过滤对象。
我想我的两个问题是:
如何访问原始对象和
plays
注释?
根据我传递给的内容,这只是给了我某些值values
。我更愿意访问原始对象——模型有我想调用的方法。我如何分组 from
SongPlay
toArtist
? 我想展示一张艺术家图表,以及一张歌曲图表。