Ich habe ein Django-Modell namens "Benutzer", in dem einige grundlegende Informationen über Personen gespeichert sind, nämlich Vor- und Nachname. Ich habe derzeit eine einfache Suche in meinem Django-Modell. Wenn ein Benutzer einen ersten Namen eingibt, gibt das django-Queryset die ersten 10 Übereinstimmungen zurück, sortiert nach last Name.
Wenn Sie beispielsweise nach "Sam" suchen, erhalten Sie möglicherweise folgende Ergebnisse:
Der Code dafür ist einfach:
%Vor%Ich möchte dies jedoch so ändern, dass zuerst exakte Vornamentreffer zurückgegeben werden, gefolgt von den restlichen Ergebnissen. Wenn also jemand "Sam" eingibt, sollten die Ergebnisse stattdessen lauten:
(Der exakte Vorname entspricht zuerst, sortiert nach dem Nachnamen, gefolgt von den restlichen Übereinstimmungen sortiert nach Nachnamen).
Ich habe darüber nachgedacht, dies in zwei Abfragesätze umzuwandeln und dann die Listen einfach zu kombinieren, aber ich habe mich gefragt, ob es möglich ist, dies in einer Abfrage zu tun, im Idealfall mit der Basis-API von django (anstatt eine einmalige Abfrage zu schreiben) ). Kennt jemand einen Weg, das zu tun?
Vielen Dank im Voraus.
Ich denke nicht, dass es wirklich möglich ist, das mit nur einer Abfrage zu tun (zumindest mit Django ORM).
Ihre 2 Abfragen sollten also so aussehen:
%Vor%Eine andere Möglichkeit ist es, die Abfrage in Python zu filtern, aber Sie müssen alle Ergebnisse erhalten, nicht nur die letzten 10:
%Vor%werfen Sie auch einen Blick auf diese Frage, die nicht tiefer geht, als Sie wahrscheinlich brauchen: Wie kombiniere ich 2 oder mehr Abfragesätze in einer Django-Ansicht?
Es ist nicht schön und persönlich würde ich empfehlen, eine Suchmaschine wie django-haystack zu verwenden, aber wenn Sie wissen, welche Datenbank Sie verwenden Sie könnten QuerySet.extra verwenden Fügen Sie ein Feld hinzu, um die Datensätze zu sortieren:
%Vor%Ich denke, Sie brauchen vielleicht eine Volltextsuche, um das zu erreichen. Schau dir djang-sphinx an.
Wenn Ihr Beispiel so kompliziert ist wie Ihr vollständiger Anwendungsfall, können Sie einfach die Sortierung und Sortierung in Ihrem Benutzercode vornehmen.
Tags und Links python django order django-queryset