#python #django
#python #django
Вопрос:
Вот упрощенная версия моих моделей (Django 1.9, если это имеет значение):
class Player(models.Model):
name = models.StringField()
class Match(models.Model):
player_1 = models.ForeignKey(Player, related_name="player_1")
player_2 = models.ForeignKey(Player, related_name="player_2")
Есть ли какой-либо способ добавить player.matches
поле в модель, которое запрашивало бы все совпадения, где находится игрок player_1
или player_2
? В частности, я хочу сделать это, чтобы воспользоваться select_related() для сокращения n 1 запросов при получении совпадений для каждого игрока
Я знаю, что могу переструктурировать базу данных для поддержки этого, но предпочел бы этого не делать.
Комментарии:
1. Я думаю, что player.player1.all() и player.player2.all() в совокупности выдадут вам все совпадения
Ответ №1:
Самым простым способом было бы обратное слияние запросов.
class Player(models.Model):
name = models.StringField()
def matches(self):
return self.player_1.all() | self.player_2.all()
Комментарии:
1. Идеально — и это работает с prefetch_related. Огромное спасибо!