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