在Django模型中获取多对多关联的多对多字段

0 投票
1 回答
802 浏览
提问于 2025-04-17 04:55

我在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相关的球队所关联的比赛。

撰写回答