在django模型中获得多对多领域的多对多关联

时间:2011-10-24 18:56:59

标签: python django django-models many-to-many

我在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 个答案:

答案 0 :(得分:3)

 p1_tournaments = Tournament.objects.filter(team__player=p1)

为每个反向外键或m2m字段创建了隐式查找。如果指定的话,它可以是小写的模型类,也可以是related_name参数。

因此,基本上,该过滤器会说明与与玩家相关的团队相关的锦标赛p1