Django 模型:通过模型分组查找平均值
Django Model: Find Avg by Grouping from models
我一直在努力寻找对 get 查询集进行评分的平均值。
这是我的models.py
class Movie(models.Model):
title = models.CharField(max_length=240)
release = models.DateField(blank=True)
review = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
poster = models.FileField(null=True, blank=True)
poster_wide = models.FileField(null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
def comment_count(self):
return self.comment_set.count()
def rating_avg(self):
rate = self.rating.aggregate(Avg('rating'))
return rate['rating__avg']
class Rating(models.Model):
movie = models.ForeignKey(Movie,on_delete=models.CASCADE,related_name='rating')
rating = models.IntegerField(choices=rating_choices, default=5)
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
views.py
中的代码
def home(request):
top_movies = Movie.objects.annotate(avg = Avg('rating')).order_by('avg')[:5]
context = {
'top_movies': top_movies,
}
return render(request, 'home.html', context)
我需要从这个给定的模型中找到评分最高的 5 部电影。
但是不知道如何分组查询才能找到平均值。上面的查询没有提供正确的答案。
我可以参考的其他答案或文档的任何链接?
这里完全是胡说八道,因为我无法真正对此进行测试,但也许您可以通过评级找到电影,因为它是包含另一个外键的模型。
Rating.objects.values('movie').annotate(avg=Avg('rating')).order_by('avg')
or
Rating.objects.annotate(avg=Avg('rating'),
movie=Rating.objects.values('movie')).order_by('avg')
几乎什么都试过了,终于找到了。
这给出了带有 movieobjects
的所需查询集
top_movies = Movie.objects.annotate(avg=Avg("rating__rating")).order_by('-avg')[:5]
我一直在努力寻找对 get 查询集进行评分的平均值。
这是我的models.py
class Movie(models.Model):
title = models.CharField(max_length=240)
release = models.DateField(blank=True)
review = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
poster = models.FileField(null=True, blank=True)
poster_wide = models.FileField(null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
def comment_count(self):
return self.comment_set.count()
def rating_avg(self):
rate = self.rating.aggregate(Avg('rating'))
return rate['rating__avg']
class Rating(models.Model):
movie = models.ForeignKey(Movie,on_delete=models.CASCADE,related_name='rating')
rating = models.IntegerField(choices=rating_choices, default=5)
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
views.py
中的代码def home(request):
top_movies = Movie.objects.annotate(avg = Avg('rating')).order_by('avg')[:5]
context = {
'top_movies': top_movies,
}
return render(request, 'home.html', context)
我需要从这个给定的模型中找到评分最高的 5 部电影。 但是不知道如何分组查询才能找到平均值。上面的查询没有提供正确的答案。 我可以参考的其他答案或文档的任何链接?
这里完全是胡说八道,因为我无法真正对此进行测试,但也许您可以通过评级找到电影,因为它是包含另一个外键的模型。
Rating.objects.values('movie').annotate(avg=Avg('rating')).order_by('avg')
or
Rating.objects.annotate(avg=Avg('rating'),
movie=Rating.objects.values('movie')).order_by('avg')
几乎什么都试过了,终于找到了。 这给出了带有 movieobjects
的所需查询集top_movies = Movie.objects.annotate(avg=Avg("rating__rating")).order_by('-avg')[:5]