我有一个这样的模型:
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,每部电影都有相同的电影。)
感谢。
答案 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