1

에 평균에 주석을 나는이 모델이있다. 나는이 일을 예상 :장고 모델 필드

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)))