PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Queryset-Sortierung:Angeben der Spaltensortierung für die Django-ORM-Abfrage

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() .