我正在尝试编写一个返回类似的查询:
{idBlock: average_score, idBlock: average_score...}
或带值:
{1: 3.12, 2: 4.18...}
我的模型看起来像这样:
class MyModel(models.Model):
idBlock = models.ForeignKey(Block)
score = models.PositiveIntegerField(blank=False, null=False)
可能会有数千个块ID,每个ID有几十个分数,可能有数千个分数。我尝试过各种来源的各种查询,这个问题最接近我需要的解决方案:
MyModel.objects.annotate(average_score=Avg('score')).values('idBlock','score')
返回:
{'idBlock': 6L, 'score': 6L}, {'idBlock': 6L, 'score': 9L}, {'idBlock': 7L, 'score': 5L}, {'idBlock': 7L, 'score': 8L}, {'idBlock': 8L, 'score': 6L}
以上查询不计算平均值...所以我的查询错误。
答案 0 :(得分:0)
你应该注释的是Block
,而不是MyModel
。尝试:
Block.objects.annotate(average_score=Avg('mymodel__score'))
.values('id','average_score')