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