Как объединить таблицы по списку идентификаторов в Django ORM
У меня есть две таблицы - Игроки и Здания. Например:
class Players(models.Model):
username = models.CharField(max_length=500)
buildings = models.CharField(validators=[int_list_validator], default=list, max_length=100)
class Buildings(models.Model):
building_name = models.CharField(max_length=500)
У игрока может быть много зданий, которые находятся в поле Player.buildings в виде списка идентификаторов.
Мне нужно написать запрос, чтобы получить информацию о зданиях для игрока. В Postgres SQL я получил такой запрос:
SELECT *
FROM players p
LEFT JOIN buildings b on b.id=ANY(buildings) where p.id = %s;
Но как я могу написать этот SQL-запрос, используя Python и Django ORM?
Вам следует использовать имена единственного числа для своих моделей.
class Player(models.Model):
username = models.CharField(max_length=500)
buildings = models.ManyToManyField(Building)
class Building(models.Model):
building_name = models.CharField(max_length=500)
Теперь, когда вы хотите получить доступ к набору зданий для вашего игрока, вы можете сделать следующее:
Player.objects.get("пк игрока").buildings.all()