Desde o Django 1.8
order_by()
aceita não apenas nomes de campo mas também expressões de consulta . Em outra resposta Eu dei um exemplo de como você pode substituir o agrupamento padrão de uma coluna. A expressão de consulta útil aqui é Func() , que você pode subclassificar ou usar diretamente:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
No entanto, observe que o SQL resultante será mais parecido com:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Ou seja, o agrupamento é substituído em
ORDER BY
cláusula em vez de em SELECT
cláusula. No entanto, se você precisar usá-lo em um WHERE
cláusula, você pode usar Func()
em annotate()
.