В Django как я могу получить количество записей на основе подзапроса подзапроса? - PullRequest
1 голос
/ 13 марта 2020

Бейсболист играет в игру, если он появляется в этой игре один или несколько раз. Итак, чтобы подсчитать количество игр, в которые играл игрок, вам нужно сосчитать игры, в которых есть иннинг, которые появляются у этого игрока.

Вот мои модели:

class Player(models.Model):
    ...

class Game(models.Model):
    ...

class Inning(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)

class Appearance(models.Model):
    inning = models.ForeignKey(Inning, on_delete=models.CASCADE)
    player = models.ForeignKey(Player, on_delete=models.CASCADE)

Запрос SQL для достижения того, чего я хочу:

SELECT COUNT(*)
FROM games_game
WHERE id IN (SELECT game_id
             FROM innings_inning
             WHERE id IN (SELECT inning_id
                          FROM appearances_appearance
                          WHERE player_id = 1)) 

Как я могу сделать это в Django без использования Raw SQL?

Обратите внимание, что это для PlayerDetailView, поэтому мне просто нужно это для одного Player объекта.

1 Ответ

1 голос
/ 13 марта 2020

Вы можете выполнить такой подсчет с помощью:

Game.objects.filter(<b>inning__appearance__player=<i>my_player</i></b>).distinct().count()

Где my_player - игрок, для которого вы хотите посчитать Game с.

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