Seit Django 1.8 order_by()
akzeptiert nicht nur Feldnamen sondern auch Abfrageausdrücke .
In eine weitere Antwort Ich habe ein Beispiel dafür gegeben, wie Sie die Standardsortierung für eine Spalte überschreiben können. Der nützliche Abfrageausdruck hier ist Func() , die Sie ableiten oder direkt verwenden können:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Beachten Sie jedoch, dass das resultierende SQL eher wie folgt aussehen wird:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Das heißt, die Sortierung wird in ORDER BY
überschrieben -Klausel statt in SELECT
Klausel. Wenn Sie es jedoch in einem WHERE
verwenden müssen -Klausel können Sie Func()
verwenden in annotate()
.