Gibt es eine Möglichkeit eine Abfrage respektieren die Reihenfolge der eingegebenen Parameter zu machen?

StackOverflow https://stackoverflow.com/questions/2247892

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.

War es hilfreich?

Lösung

Dies ist nicht durch Django verursacht; Ihre Datenbank wird sie in dieser Reihenfolge, da keine Bestellung Rückkehr angegeben ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top