PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Tri des ensembles de requêtes :spécification du classement des colonnes pour la requête ORM django

Depuis Django 1.8 order_by() accepte non seulement les noms de champs mais aussi les expressions de requête .

Dans une autre réponse J'ai donné un exemple de la manière dont vous pouvez remplacer le classement par défaut d'une colonne. L'expression de requête utile ici est Func() , que vous pouvez sous-classer ou utiliser directement :

nimi_et = Func(
    'nimi',
    function='et_EE',
    template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())

Cependant, notez que le SQL résultant ressemblera davantage à :

SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;

Autrement dit, le classement est remplacé dans ORDER BY clause plutôt que dans SELECT clause. Cependant, si vous avez besoin de l'utiliser dans un WHERE clause, vous pouvez utiliser Func() dans annotate() .