Sinds Django 1.8 order_by()
accepteert niet alleen veldnamen maar ook query-expressies .
In een ander antwoord Ik heb een voorbeeld gegeven van hoe u de standaardsortering voor een kolom kunt overschrijven. De bruikbare query-expressie hier is Func() , die u kunt onderklassen of direct kunt gebruiken:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Houd er echter rekening mee dat de resulterende SQL meer zal zijn als:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Dat wil zeggen, de sortering wordt overschreven in ORDER BY
clausule in plaats van in SELECT
clausule. Als u het echter moet gebruiken in een WHERE
clausule, kunt u Func()
. gebruiken in annotate()
.