PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ordinamento del set di query:specifica delle regole di confronto delle colonne per la query ORM di django

Da Django 1.8 order_by() accetta non solo i nomi dei campi ma anche le espressioni di query .

In un'altra risposta Ho fornito un esempio di come è possibile ignorare le regole di confronto predefinite per una colonna. L'utile espressione di query qui è Func() , che puoi sottoclassare o utilizzare direttamente:

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

Tuttavia, nota che l'SQL risultante sarà più simile a:

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

Ovvero, le regole di confronto vengono sovrascritte in ORDER BY clausola anziché in SELECT clausola. Tuttavia, se hai bisogno di usarlo in un WHERE clausola, puoi usare Func() in annotate() .