Объединение наборов запросов в список - самый простой подход. Если база данных все равно будет обработана для всех наборов запросов (например, из-за того, что результат должен быть отсортирован), это не добавит дополнительных затрат.
from itertools import chain
result_list = list(chain(page_list, article_list, post_list))
Использование itertools.chain
быстрее, чем зацикливание каждого списка и добавление элементов один за другим, поскольку itertools
реализовано в C. Он также потребляет меньше памяти, чем преобразовывает каждый набор запросов в список перед объединением.
Теперь можно отсортировать результирующий список, например. по дате (в соответствии с просьбой в комментарии Хасена к другому ответу). Функция sorted()
удобно принимает генератор и возвращает список:
result_list = sorted(
chain(page_list, article_list, post_list),
key=lambda instance: instance.date_created)
Если вы используете Python 2.4 или более позднюю версию, вы можете использовать attrgetter
вместо лямбды. Я помню, что читал о том, что это быстрее, но я не увидел заметной разницы в скорости для списка из миллиона предметов.
from operator import attrgetter
result_list = sorted(
chain(page_list, article_list, post_list),
key=attrgetter('date_created'))