Django按ForeignKey的数量进行筛选,并且在DateField中不到一个月

Django按ForeignKey的数量进行筛选,并且在DateField中不到一个月,django,django-models,Django,Django Models,我有一个这样的模型: class MovieHistory(models.Model): watched_by = models.ForeignKey(User) time = models.DateTimeField(auto_now_add=True) movie = models.ForeignKey(Movie) 我想拍15部过去30天里看得最多的电影。到目前为止,我有: Movie.objects.filter(time\u gte=datetime.now(

我有一个这样的模型:

class MovieHistory(models.Model):
    watched_by = models.ForeignKey(User)
    time = models.DateTimeField(auto_now_add=True)
    movie = models.ForeignKey(Movie)
我想拍15部过去30天里看得最多的电影。到目前为止,我有:

Movie.objects.filter(time\u gte=datetime.now()-timedelta(days=30))

如何再次筛选,并按电影数量排序?我知道我可以像这样过滤前15个结果:
[:15]
,但我不知道如何按照该模型中的电影数量进行订购,并且只选择其中一个(因此我没有重复的电影历史记录,每一个都有相同的电影)


谢谢。

注释可能是最好的方法:

from django.db.models import Count
most_watched = Movie.objects.all().annotate(num_watched = Count('watched_by')).order_by('-num_watched')[:15]
我还没有测试过这一点,但我相信这正是答案所在。请让我知道它是否有效!您可能需要将
count('wasted_by')
替换为
count('wasted_by_id')
或数据库中的任何字段名(使用
/manage.py sql检查您的\u appname

希望这有帮助


有关使用这些注释的详细信息:

+1,但它应该是
-num_wasted
-OP需要最受关注的。如果我在我的
过滤器之后附加(
annotate
)它会给我一个错误
'QuerySet'对象没有属性“annonate”
。有可能以某种方式链接这些方法吗?我相信您必须先注释,然后过滤。