我有這些模型:Django的平均標註的型號場
class Agency(models.Model):
pass
class User(models.Model):
agency = models.ForeignKey(Agency)
class Feedback(models.Model):
rating = models.DecimalField()
user = models.ForeignKey(User)
,我想註釋,平均收視所有的查詢集。我預計這個工作:
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)
)
那裏的平均評級是每個機構。有任何想法嗎?
你試圖找出特定用戶的平均評分?或者屬於一個代理商的全部用戶?你能用文字描述什麼是用例? –