Ich versuche eine effiziente Möglichkeit zu finden, den Rang eines Objekts in der Datenbank zu finden, die sich auf seine Punktzahl bezieht. Meine naive Lösung sieht wie folgt aus:Wie bekomme ich die Position eines Ergebnisses in der Liste nach einem order_by?
rank = 0
for q in Model.objects.all().order_by('score'):
if q.name == 'searching_for_this'
return rank
rank += 1
Es sollte möglich sein, die Datenbank zu erhalten, die Filterung zu tun, mit order_by:..
Model.objects.all() order_by ('Score') Filter (name = 'searching_for_this')
Es scheint jedoch keine Möglichkeit zu geben, den Index für den order_by-Schritt nach dem Filter abzurufen.
Gibt es einen besseren Weg, dies zu tun? (Mit Python/Django und/oder Raw-SQL.)
Mein nächster Gedanke ist es, Ränge auf Einsatz vorberechnen, aber das scheint chaotisch.
etwas wie: 1. 'wählen Punktzahl als retrieved_score where name = 'searching_for_this'' 2.' select count (*), wo Score <= retrieved_score' -> Rang – jfs