以下に示すようなデータベースモデルがあります。データを、それぞれ 3 つの評価を持つ 2 冊の異なる本と考えてください。
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()
質問 : 1 つのクエリで書籍ごとにすべての評価をリストにグループ化することは可能ですか。コードでクエリセットを反復処理せずに、データベース レベルでこれを実行しようとしています。出力は次のようになります。
{
'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')
編集:データベースレベルで要素をグループ化する方法を探しているという明確化を追加しました。