我想使用Django ORM来给予我一个对象子集的模型属性值列表,这些对象子集具有另一个属性的不同值。考虑一个简单的模型,如:
class Result(models.Model):
color = models.CharField()
score = models.IntegerField()
假设我有四个结果:
results = [
Result(color="blue", score=5),
Result(color="blue", score=3),
Result(color="red", score=10),
Result(color="red", score=8),
]
我想得到的是类似下面的东西:
{
{"color”: "blue", "scores": [5, 3]},
{"color": "red", "scores": [10, 8]},
}
我认为使用Django的聚合和注解特性可以一次完成,但我一直在努力想办法。我知道我可以用下面的方法得到平均分:
results.values("color").annotate(avg_score=Avg("score"))
如果这是可能的,那么获得用于生成平均值的列表也一定是可能的,对吗?
1条答案
按热度按时间mkshixfv1#
不幸的是,这将取决于你的DB。
如果使用Postgresql,则可以访问ArrayAgg,因此可以执行以下操作:
如果您使用的是MySQL或MariaDB,则可以使用GroupConcat。
但这不会产生数组,它会产生一个字符串,其中的值用逗号分隔。
如果将使用Python操作此字段,则可以执行以下操作来获取数组: