【发布时间】:2020-02-28 19:45:32
【问题描述】:
我的目标似乎很简单:显示外部模型特定字段的总和(聚合)。 困难在于当前的设置,请看一下并告诉我是否需要更改或我可以使用当前模型实现目标:
class Route(models.Model):
name = models.CharField(max_length=50)
route_length = models.IntegerField()
class Race(models.Model):
race_cod = models.CharField(max_length=6, unique=True)
route_id = models.ForeignKey(Route, on_delete=models.CASCADE, related_name='b_route')
class Results(models.Model):
race_id = models.ForeignKey(Race, on_delete=models.CASCADE, related_name='r_race')
runner_id = models.ForeignKey(Runner, on_delete=models.CASCADE, related_name='r_runner')
现在,我正在尝试做一个年度总结:
Runner X 参加了 12 场比赛,总距离为 134 公里。
虽然我能够像这样计算比赛的数量(views.py)
runner = Runner.objects.get(pk=pk)
number_races = Results.objects.filter(runner_id=runner).count()
为了计算我尝试过的距离:
distance = Results.objects.filter(runner_id=runner).annotate(total_km=Sum(race_id.route_id.route_length))
这段代码错误指出在views.py - 距离线
异常类型:NameError 异常值:未定义名称“race_id”
我确定我并没有完全理解它是如何工作的。有没有好心人澄清一下这个问题?
谢谢
【问题讨论】:
标签: django aggregate field annotate foreign-collection