Как объединить таблицы по списку идентификаторов в 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()

Вернуться на верх