Получение много ко многим областям много ко многим ассоциации в модели Django - PullRequest
1 голос
/ 24 октября 2011

У меня есть два уровня много-много ассоциаций в 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 голосов
/ 24 октября 2011
 p1_tournaments = Tournament.objects.filter(team__player=p1)

Существует неявный поиск, созданный для каждого обратного внешнего ключа или поля m2m. Это либо класс модели в нижнем регистре, либо аргумент related_name, если указан.

Так что, по сути, этот фильтр говорит, что получайте турниры, связанные с командами, которые связаны с игроком, p1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...