Od Django 1.8 order_by() akceptuje nie tylko nazwy pól ale także wyrażenia zapytań .
W innej odpowiedzi Podałem przykład, w jaki sposób można zastąpić domyślne sortowanie dla kolumny. Przydatne wyrażenie zapytania to Func() , które możesz podklasy lub użyć bezpośrednio:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Pamiętaj jednak, że wynikowy kod SQL będzie bardziej przypominał:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Oznacza to, że sortowanie jest zastępowane w ORDER BY klauzula zamiast w SELECT klauzula. Jeśli jednak potrzebujesz go użyć w WHERE klauzuli, możesz użyć Func() w annotate() .