От Django 1.8 order_by()
приема не само имена на полета но и изрази за заявки .
В друг отговор Дадох пример за това как можете да замените сортирането по подразбиране за колона. Полезният израз за заявка тук е Func() , които можете да подкласирате или да използвате директно:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
И все пак имайте предвид, че полученият SQL ще прилича повече на:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Тоест сортирането се отменя в ORDER BY
клауза, а не в SELECT
клауза. Въпреки това, ако трябва да го използвате в WHERE
клауза, можете да използвате Func()
в annotate()
.