Django模型:通过对模型进行分组来查找平均

时间:2018-08-13 17:24:35

标签: python django django-models django-annotate

我一直在尝试寻找对获取查询集进行评级的平均值。

这是我的 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部电影。 但是不知道如何对分组查询可以找到平均值。上面的查询没有提供正确的答案。 我可以参考其他答案或文档的任何链接吗?

2 个答案:

答案 0 :(得分:3)

尝试了几乎所有内容,最后找到了一个。 这给出了带有movieobjects的必需查询集

TwentySeventeen

答案 1 :(得分:0)

在这里完全地,全部地吐口水,因为我不能真正地对此进行测试,但是也许您可以通过Rating来获得Movie,因为它是包含对方的ForeignKey的模型。

createFile(event.body)
        .then(() => readFile()
                .then((data) => uploadToS3(data))
                .then(() => deleteTmp())) // <- close-parenthesis here.
        .catch(err => console.log(err));