1

に平均に注釈を付けます。私はこれが機能することが期待:Djangoは、私はこれらのモデルを持っているモデルフィールド

Feedback.objects.annotate(avg_rating=Avg('rating')).values('rating', 'avg_rating') 

が、それはちょうどこの出力:

<QuerySet [{'rating': 0.8, 'avg_rating': 0.8}, {'rating': 0.2, 'avg_rating': 0.2}, {'rating': 0.6, 'avg_rating': 0.6}, {'rating': 1.0, 'avg_rating': 1.0}, {'rating': 0.4, 'avg_rating': 0.4}]> 

あなたは平均が3.0である必要があります見ることができるように。どこが間違っていますか?明確さのビットのために

は、私はこのような何かをしようとしている:

agencies = Agency.objects.annotate(
    avg_rating=Coalesce(Subquery(
     Feedback.objects.filter(user__agency_id=OuterRef('pk')) 
     .values('rating') 
     .annotate(avg_rating=Avg('rating', output_field=DecimalField())) 
     .values('avg_rating') 
    ), 0) 
) 

を平均評価機関ごとです。何か案は?

+0

あなたは、特定のユーザーの平均評価を見つけるためにしようとしていますか?または、ある代理店に所属するすべてのユーザーですか?あなたは、ユースケースが何であるかを言葉で説明できますか? –

答えて

1
Feedback.objects.aggregate(avg_rating=Avg('rating')) 
+0

私はそれを各インスタンスに付ける必要があります。あなたは代理店とフィードバックの関係を与えることができますので、 –

+0

注釈を付ける必要がありますか?外国人? –

+0

上部のモデル構造はそれを示しています。 –

0

多分これを試してみてください。

agencies = Agency.objects.annotate(
avg_rating=Coalesce(Subquery(
    Feedback.objects.values('user__agency') 
    .annotate(avg_rating=Avg('rating', output_field=DecimalField())) 
    .values('avg_rating') 
), 0))) 
関連する問題