【发布时间】:2014-07-29 09:38:33
【问题描述】:
这些是我在 django 中的模型
class Match(models.Model):
team_a = models.ForeignKey("Team", related_name="team_a")
equipo_b = models.ForeignKey("Team", related_name="team_b")
goals_team_a = models.IntegerField(default=0)
goals_team_b = models.IntegerField(default=0)
winner_team = models.ForeignKey("Team", related_name="winner_team", null=True)
match_type = models.CharField(choices=match_type_choices, max_length=100, null=False)
match_played = models.BooleanField(default=False)
date = models.DateField()
class Team(models.Model):
name = models.CharField(max_length=200)
group = models.CharField(choices=group_choices, max_length=1, null=False)
matches_played = models.IntegerField(default=0)
matches_won = models.IntegerField(default=0)
matches_lost = models.IntegerField(default=0)
matches_tied = models.IntegerField(default=0)
goals_in_favor = models.IntegerField(default=0)
goals_agaiinst = models.IntegerField(default=0)
points = models.IntegerField(default=0)
url_flag = models.CharField(max_length=500)
我在原始 sql 中有以下句子:
select
(select sum(goals_team_a) from match where team_a_id=9) +
(select sum(goals_team_b) from match where team_b_id=9) goals_in_favor,
(select sum(goals_team_b) from match where team_a_id=9) +
(select sum(goals_team_a) from match where team_b_id=9) goles_against
;
我正在寻找一种使用 Django QuerySet API 重写此查询的有效方法,但甚至找不到方法,我知道我必须使用 annotate() 函数,但不要不知道怎么做。
【问题讨论】:
标签: python sql django django-models django-database