0
在Django中,我有車型像這樣的應用程序:分組由一個ForeignKey和ForeignKeys是另一個「步」走
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)
time = models.DateTimeField()
我希望能夠做的播放次數最多的歌曲的圖和最受歡迎的藝術家。我怎樣才能使用Django的ORM來做這樣的GROUP BY
和COUNT
?
目前,我在做這樣的事情:
SongPlay.objects.values('song__id', 'song__artist__name', 'song__title')
.annotate(Count('song')).order_by('-song__count')[:10]
...得到的前10首歌曲,而這個:
SongPlay.objects.values('song__artist__id', 'song__artist__name')
.annotate(Count('song__artist')).order_by('-song__artist__count')[:10]
...讓高層10位藝術家。
有沒有更簡單的方法來實現這一目標?我不太喜歡指定values
,我寧願按照(song_object, count)
和(artist_object, count)
的順序得到元組。
有沒有什麼明顯的我錯過了?謝謝!
這正是我要找的,謝謝。我沒有意識到你可以通過像'song__songplay'這樣的關係'計數'! – 2012-03-03 08:22:43