Django поиск дочерних моделей по внешнему ключу - PullRequest
0 голосов
/ 02 марта 2020

У меня есть файл models.py, который более или менее выглядит следующим образом:

class Match(models.Model):
    match_id = models.BigIntegerField()

class Team(models.Model):
    team_id = models.CharField(max_length=4)
    match = models.ForeignKey(
        Match,
        related_name='teams',
        on_delete=models.CASCADE,
    )
    win = models.BooleanField()

class Player(models.Model):
    player_id = models.IntegerField()
    team = models.ForeignKey(
        Team,
        related_name='players'
        on_delete=models.CASCADE,
    )

Для каждого матча я хочу найти две сыгравшие команды, и для каждой команды я хочу найти игроки, которые были в команде. Это то, что я пробовал до сих пор:

match_id = 123456789
match_info = Match_model.objects.get(match_id=match_id)

red_info = Team_model.objects.get(match=match_info, team_id='Red')
blue_info = Team_model.objects.get(match=match_info, team_id='Blue')

red_players = Player_model.objects.filter(team=red_info)
blue_players = Player_model.objects.filter(team=blue_info)

, но Django дает мне ошибку:

Team matching query does not exist. 

Как бы я go исправил эту ошибку? Будем весьма благодарны за любые указания о том, как исправить мои запросы!

1 Ответ

1 голос
/ 02 марта 2020
try:
    red_info = Team_model.objects.get(match=match_info, team_id='Red')
    blue_info = Team_model.objects.get(match=match_info, team_id='Blue')
except Team_model.DoesNotExist:
    pass
else:
    red_players = Player_model.objects.filter(team=red_info)
    blue_players = Player_model.objects.filter(team=blue_info)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...