Я хотел бы добавить или цепочку нескольких Querysets в Django, сохраняя порядок каждого из них (а не результат). Я использую стороннюю библиотеку для разбивки на результат, и он принимает только списки или запросы. Я пробовал эти параметры:Как связать запросы Django, сохраняя индивидуальный заказ
Queryset join: Не сохраняет порядок в отдельных запросах, поэтому я не могу использовать это.
result = queryset_1 | queryset_2
Использование itertools: Вызов list()
на объекте цепи фактически оценивает querysets, и это может вызвать много накладных расходов. Не так ли?
result = list(itertools.chain(queryset_1, queryset_2))
Как вы думаете, куда мне идти?
Я делаю сложные Seach на одной и той же модели расщепленного в нескольких запросах. Каждый из них извлекает записи, соответствующие определенному условию, и каждый из них упорядочивается определенным образом. Результат должен включать результаты каждого запроса и должен поддерживать порядок каждого из этих наборов запросов. Поэтому я не могу использовать здесь объекты 'Q', так как мне не разрешено делать несколько' order_by() 'в том же запросе. Я хотел бы избежать вызова 'list()' на каждом наборе запросов, чтобы избежать доступа к базе данных, получая слишком много объектов в памяти. – Caumons
Считаете ли вы возможным составить чистый SQL-запрос, который вернет единый набор строк, упорядоченных и отфильтрованных точно так, как вы хотите? Если нет, то один QuerySet тоже не сможет этого сделать.Например, если вы заказываете два набора результатов несовместимыми способами. Если вы работаете над этой несовместимостью, используя сложное соединение из двух четко упорядоченных наборов результатов, это не то, что может сделать ORJ DJANO. – Demiurge
Я не хочу вдаваться в чистый SQL столько, сколько я могу остаться с ORM Django. Я просто просил это посмотреть, есть ли лучшая альтернатива тому, что я делаю (в настоящее время использую второй пример) с ограниченным запросом, чтобы не иметь тысячи объектов в памяти. – Caumons