Django按DateKey的数量过滤,在DateField中过滤不到一个月

时间:2014-06-27 15:07:00

标签: django django-models

我有一个这样的模型:

class MovieHistory(models.Model):
    watched_by = models.ForeignKey(User)
    time = models.DateTimeField(auto_now_add=True)
    movie = models.ForeignKey(Movie)

我想拍摄最近30天内观看次数最多的15部电影。到目前为止,我有这个:

Movie.objects.filter(time__gte=datetime.now()-timedelta(days=30))

如何再次过滤,并按电影计数订购?我知道我可以过滤前15个结果:[:15],但我不知道如何按照该模型中的电影数量进行排序,只选择其中一个(所以我没有重复MovieHistories,每部电影都有相同的电影。)

感谢。

1 个答案:

答案 0 :(得分:2)

注释可能是最好的方法:

from django.db.models import Count
most_watched = Movie.objects.all().annotate(num_watched = Count('watched_by')).order_by('-num_watched')[:15]

我没有对此进行测试,但我相信这是在回答的路上。如果有效,请告诉我!您可能需要将count('watched_by')替换为Count('watched_by_id')或数据库中的字段名称(请查看./manage.py sql your_appname)。

希望这有帮助!

有关使用这些注释的更多信息:https://docs.djangoproject.com/en/dev/topics/db/aggregation/#cheat-sheet