在Django模型中获取多对多关联的多对多字段
我在Django中有两个层次的多对多关系。一个玩家可以属于一个或多个队伍,而一个队伍可以参加一个或多个比赛。现在,我想知道某个玩家参加过哪些比赛。
以下是简化后的模型:
class Tournament(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
class Team(models.Model):
team_name = models.CharField(max_length=100, blank=True, null=True)
tournaments_played = models.ManyToManyField(Tournament)
class Player(models.Model):
player_name = models.CharField(max_length=100, blank=True, null=True)
belongs_to_team = models.ManyToManyField(Team)
在我的视图中,我尝试了以下方法:
pl = Player.objects.get(player_name = "Andrew Flintoff")
ts = pl.belongs_to_team()
这样我得到了多个队伍,现在我想知道每个队伍参加过哪些比赛。
qs_list = []
for t in ts:
team_qs = Team.objects.get(team_name = t)
tourn = team_qs.tournaments_played.all()
qs_list.append(tourn)
然后在我的上下文中,我可以传递查询集列表 qs_list
。有没有更好或更简单的方法呢?
1 个回答
3
p1_tournaments = Tournament.objects.filter(team__player=p1)
每当你有一个反向外键或者多对多字段时,系统会自动创建一个查找。这种查找的名字通常是模型类的小写形式,或者如果你指定了的话,就是related_name
这个参数的值。
简单来说,这个过滤器的意思是获取与球员p1
相关的球队所关联的比赛。