【发布时间】:2021-07-04 13:37:57
【问题描述】:
我陷入了这个明显的基本问题,感觉我错过了一些明显的东西来使它正常工作。
我的数据库模型是:
class Review(models.Model):
SCORE_CHOICES = [(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')]
user = models.ForeignKey(get_user_model(), related_name="reviews_by_user", on_delete=models.CASCADE)
recipe = models.ForeignKey(Recipe, related_name="reviews_by_recipe", on_delete=models.CASCADE)
score = models.IntegerField(choices=SCORE_CHOICES)
date_created = models.DateTimeField(default=timezone.now)
def __str__(self):
return f"{self.user} rated {self.recipe} with {self.score}"
class Meta:
ordering = ['-date_created']
我正在尝试按食谱计数平均评论分数进行分组。 这种方法感觉很好,但它没有:
Review.objects.values('recipe').annotate(Avg('score'))
结果我得到:
<QuerySet [{'recipe': 1, 'score__avg': 5.0}, {'recipe': 1, 'score__avg': 5.0}, {'recipe': 2, 'score__avg': 4.0}, {'recipe': 2, 'score__avg': 3.0}, {'recipe': 5, 'score__avg': 3.0}, {'recipe': 5, 'score__avg': 2.0}]>
这对我来说绝对是奇怪的。它应该对食谱进行分组,但相反,它计算每一行的平均值。我浏览了 Django Aggregation 文档,但找不到任何可以帮助理解我所缺少的限制或特殊条款。
如果有人知道发生了什么,请告诉我。
【问题讨论】:
标签: django django-models django-orm