sql >> Base de Datos >  >> RDS >> PostgreSQL

Clasificación de conjunto de consultas:especificación de la intercalación de columnas para la consulta ORM de django

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