Od Django 1.8 order_by()
přijímá nejen názvy polí ale také výrazy dotazů .
V další odpovědi Uvedl jsem příklad, jak můžete přepsat výchozí řazení pro sloupec. Užitečný výraz dotazu je zde Func() , kterou můžete podtřídu nebo přímo použít:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Všimněte si však, že výsledný SQL bude spíše:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
To znamená, že řazení je přepsáno v ORDER BY
klauzule spíše než v SELECT
doložka. Pokud jej však potřebujete použít v WHERE
klauzule, můžete použít Func()
v annotate()
.