【发布时间】:2013-11-05 02:45:27
【问题描述】:
假设我正在使用 Django 管理有关运动员的数据库:
class Player(models.Model):
name = models.CharField()
weight = models.DecimalField()
team = models.ForeignKey('Team')
class Team(models.Model):
name = models.CharField()
sport = models.ForeignKey('Sport')
class Sport(models.Model):
name = models.CharField()
假设我想计算每支球队球员的平均体重。我想我会这样做:
Team.objects.annotate(avg_weight=Avg(player__weight))
但是现在说我想计算每项运动中团队权重的方差。有没有办法使用 Django ORM 做到这一点?在 QuerySet 上使用 extra() 方法怎么样?非常感谢任何建议。
【问题讨论】:
-
你能给我们举一个你想做的计算的例子吗?我假设您的意思是 avg_weight - specific_player.weight。
-
您不能在额外调用中引用由 annotate 调用创建的字段。但是,您可以尝试这样的事情:stackoverflow.com/a/9284364/1637351
-
原始帖子(差异)中的具体示例是我想到的。但只是为了多样化,我可能还想知道,对于每项运动,该运动中每支球队的最大平均体重是多少。这有意义吗?
标签: django orm aggregate-functions