Gibt es eine Möglichkeit eine Abfrage respektieren die Reihenfolge der eingegebenen Parameter zu machen?
-
20-09-2019 - |
Frage
(Bitte lassen Sie mich wissen, ob dies völlig absurd ist, dass wahrscheinlich ein Grund, warum ich nichts dazu gefunden haben.)
Diese Geschichte hat zwei Modelle Ranking
und Artist
, Ranking
allgemein auf Artist
verwandt ist (object_id, content_type ... der ganze Kram).
Ich habe eine Liste von Objekten von Ranking.objects.values_list()
geordnet nach einem bestimmten Feld (in meinem Fall score
) zurückgegeben. So offensichtlich, wenn ich eine Liste der Künstler angezeigt werden soll, die gewählt wurden, würde ich sie in der gleichen Reihenfolge will. Ich habe verschiedene Methoden ausprobiert, wie .filter(pk__in=list)
, .in_bulk(list)
usw. Versucht auch das Ergebnis .values_list()
in ein Tupel Nötigung.
Sie sind alle meine Liste nehmen:
>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]
Und senden Sie es gerne so:
>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]
(Ich bin nur die IDs im zweiten Fall gebe für geistige Gesundheit willen.)
Im Moment ist die einzige Art, wie ich dies an der Arbeit bekommen kann, ist eine leere Liste und Schleife durch die Nicht-values_list()
Abfrage zu erstellen.
for item in objects:
ranked_items.append(item.content_object)
Dies erzeugt nur n
Abfragen, so dass ich frage mich, ob es ein besserer Weg. Wie durch die Tags gezeigt, ich bin mit PostgreSQL.
Lösung
Dies ist nicht durch Django verursacht; Ihre Datenbank wird sie in dieser Reihenfolge, da keine Bestellung Rückkehr angegeben ist.