У меня есть этот запрос, который объединяет несколько таблиц:
select
p.player_id
, d.player_data_1
, l.year
, l.league
, s.stat_1
, l.stat_1_league_average
from
stats s
inner join players p on p.player_id = s.player_id
left join player_data d on d.other_player_id = p.other_player_id
left join league_averages as l on l.year = s.year and l.league = s.year
where
p.player_id = 123
Мои модели выглядят так:
class Stats(models.Model):
player_id = models.ForeignKey(Player)
stat_1 = models.IntegerField()
year = models.IntegerField()
league = models.IntegerField()
class Player(models.Model):
player_id = models.IntegerField(primary_key=True)
other_player_id = models.ForeignKey(PlayerData)
class PlayerData(models.Model):
other_player_id = models.IntegerField(primary_key=True)
player_data_1 = models.TextField()
class LeagueAverages(models.Model):
year = models.IntegerField()
league = models.IntegerField()
stat_1_league_average = models.DecimalField()
Я могу сделать что-то вроде этого:
Stats.objects.filter(player_id=123).select_related('player')
сделать первое присоединение. Для второго соединения я попробовал:
Stats.objects.filter(player_id=123).select_related('player').select_related('player_data')
но я получил эту ошибку:
django.core.exceptions.FieldError: Недопустимые имена полей, указанные в select_related: 'player_data'. Выборы: игрок
Как бы я сделал третье соединение, учитывая, что year
и league
не являются внешними ключами ни в одной из таблиц? Спасибо!