将SQL查询转换为Django视图,三重内部联接

时间:2014-02-20 22:42:50

标签: python sql django

我有这个models.py

class Download(models.Model):
id = models.AutoField(primary_key=True)
song = models.ForeignKey(Song)
download_date = models.DateTimeField( auto_now_add=True)

class Song(models.Model):
file_id = models.AutoField(primary_key=True)
user = models.ForeignKey(User)

我想构建一个查询,以了解所有用户的歌曲下载次数。我计划将其显示为:User45(56下载),User46(44下载)等。

我无法按用户对下载进行分组,因为三联接似乎无效。

我有这个:

var = Download.objects.filter(download_date__day=today.day, download_date__month=today.month, download_date__year=today.month).values('song', 'song__user', 'song__user__first_name', 'song__user__last_name').annotate(numer_downloads = Count('song__user')).order_by('-numer_downloads')

非常感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我认为你最好在Song类上做过滤器,如下所示:

songs = Song.objects.annotate(download_count=Count('download_set')).all().order_by('-download_set')

然后在你的模板中你会做这样的事情:

{% for song in songs %}
    {{ song.user.username }} ({{ song.download_count }})
{% endfor %}