3

以下に示すようなデータベースモデルがあります。データを、それぞれ 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')

編集:データベースレベルで要素をグループ化する方法を探しているという明確化を追加しました。

4

1 に答える 1