我在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
。有更好/更简单的方法吗?
答案 0 :(得分:3)
p1_tournaments = Tournament.objects.filter(team__player=p1)
为每个反向外键或m2m字段创建了隐式查找。如果指定的话,它可以是小写的模型类,也可以是related_name
参数。
因此,基本上,该过滤器会说明与与玩家相关的团队相关的锦标赛p1
。