Ich möchte mehrere Querysets in Django anhängen oder verketten, wobei die Reihenfolge jedes einzelnen (nicht das Ergebnis) erhalten bleibt. Ich verwende eine Bibliothek eines Drittanbieters, um das Ergebnis zu paginieren, und akzeptiert nur Listen oder Abfragegruppen. Ich habe diese Optionen ausprobiert:So verketten Sie Django-Querysets, die individuelle Reihenfolge erhalten
Queryset Join: Sortierung in einzelnen Abfragesätzen nicht beibehalten, so kann ich dies nicht verwenden.
result = queryset_1 | queryset_2
Mit itertools: list()
an der Kette Objekt aufrufen wertet tatsächlich die querysets und dies viel Aufwand verursachen könnte. Nicht wahr?
result = list(itertools.chain(queryset_1, queryset_2))
Wie soll ich gehen?
Ich bin in mehreren Abfragen gespaltet eine komplexe Suchanfrage auf dem gleichen Modell zu tun. Jeder ruft Datensätze ab, die einer bestimmten Bedingung entsprechen und jeder auf eine bestimmte Weise geordnet ist. Das Ergebnis muss die Ergebnisse der einzelnen Abfragegruppen enthalten und die Reihenfolge der einzelnen Abfragegruppen beibehalten. Daher kann ich hier keine 'Q' Objekte verwenden, da ich in derselben Abfrage nicht mehrere' order_by() 'machen könnte. Ich möchte vermeiden, 'list()' auf jedem Abfrage-Set aufzurufen, um den Zugriff auf die Datenbank zu vermeiden und zu viele Objekte im Speicher zu erhalten. – Caumons
Denkst du, dass es möglich ist, eine reine SQL-Abfrage zu erstellen, die einen einzelnen Satz von Zeilen zurückgibt, die genau nach Ihren Wünschen geordnet und gefiltert werden? Wenn nicht, dann kann ein einzelner QuerySet dies auch nicht tun.Wenn Sie beispielsweise zwei Ergebnismengen auf inkompatible Weise bestellen. Wenn Sie diese Inkompatibilität mit einem komplexen Join aus zwei eindeutig geordneten Resultsets umgehen, ist das etwas, was django ORM nicht kann. – Demiurge
Ich möchte nicht so sehr in pures SQL einsteigen, wie ich bei Djangos ORM bleiben kann. Ich habe nur gefragt, ob es eine bessere Alternative für das, was ich gerade tue (derzeit im zweiten Beispiel), mit einer begrenzten Abfrage gibt, um zu vermeiden, dass Tausende von Objekten im Speicher sind. – Caumons