我有一个如下所示的数据库模型。将数据视为 2 本书,每本书有 3 个评分。
class Book(models.Model):
name = models.CharField(max_length=50)
class Review(models.Model):
book = models.ForeignKey(Book)
review = models.CharField(max_length=1000)
rating = models.IntegerField()
问题:是否可以通过单个查询将每本书的所有评级分组到一个列表中。我希望在数据库级别执行此操作,而无需在我的代码中迭代查询集。输出应类似于:
{
'book__name':'book1',
'rating' : [3, 4, 4],
'average' : 3.66,
'book__name':'book2',
'rating : [2, 1, 1] ,
'average' : 1.33
}
我试过这个查询,但评级既不是按书名分组的,也不是平均正确的:
Review.objects.annotate(average=Avg('rating')).values('book__name','rating','average')
编辑:添加了说明,我正在寻找一种在数据库级别对元素进行分组的方法。