Sedan Django 1.8 order_by()
accepterar inte bara fältnamn utan även frågeuttryck .
I ett annat svar Jag gav ett exempel på hur du kan åsidosätta standardsorteringen för en kolumn. Det användbara frågeuttrycket här är Func() , som du kan underklassa eller använda direkt:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Ändå, notera att den resulterande SQL kommer att vara mer som:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Det vill säga att sorteringen åsidosätts i ORDER BY
sats snarare än i SELECT
klausul. Men om du behöver använda den i en WHERE
sats, kan du använda Func()
i annotate()
.