Desde Django 1.8 order_by()
acepta no solo nombres de campo sino también expresiones de consulta .
En otra respuesta Di un ejemplo de cómo puede anular la intercalación predeterminada para una columna. La expresión de consulta útil aquí es Func() , que puede subclasificar o usar directamente:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Sin embargo, tenga en cuenta que el SQL resultante será más como:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Es decir, la intercalación se anula en ORDER BY
cláusula en lugar de en SELECT
cláusula. Sin embargo, si necesita usarlo en un WHERE
cláusula, puede usar Func()
en annotate()
.