Запрос нескольких таблиц и возвращение комбинированного набора запросов в Django при одновременном попадании в базу данных - PullRequest
0 голосов
/ 08 апреля 2019

Допустим, у меня установлены следующие модели:

class X(models.Model):
     ...

class Y(models.Model):
     x = models.ForeignKey(X)

class Z(models.Model):
     x = models.ForeignKey(X)

Теперь в методе я хочу получить все Y объекты и Z объекты, которые связаны с данным X объектом. Я хочу поразить мою базу данных один раз и вернуть комбинированный набор запросов. Прямо сейчас я делаю это так:

x = X.objects.get(pk=1)
queryset = []
for cls in [Y, Z]:
    queryset += list(cls.objects.filter(x=x))

Примечание: запуск его через цикл важен, потому что в моем собственном коде немало моделей, поэтому циклы сохраняют все СУХОЕ. Как я могу это сделать? Благодаря.

1 Ответ

1 голос
/ 08 апреля 2019

Если вам нужно объединить наборы запросов из разных моделей, лучший / быстрый способ - использовать itertools .Имейте в виду, что это преобразует его из QuerySet в обычный List.

from itertools import chain
x = X.objects.get(pk=1)
y = Y.objects.filter(x=x)
z = Z.objects.filter(x=x)
result_list = list(chain(y, z))

Насколько я знаю, нет способа запросить две разные модели таким образом, даже с select_related или prefetch_related.

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