Kể từ Django 1.8 order_by()
không chỉ chấp nhận tên trường mà còn cả biểu thức truy vấn .
Trong một câu trả lời khác Tôi đã đưa ra một ví dụ về cách bạn có thể ghi đè đối chiếu mặc định cho một cột. Biểu thức truy vấn hữu ích ở đây là Func () , mà bạn có thể phân lớp hoặc sử dụng trực tiếp:
nimi_et = Func(
'nimi',
function='et_EE',
template='(%(expressions)s) COLLATE "%(function)s"')
Test.objects.order_by(nimi_et.asc())
Tuy nhiên, lưu ý rằng SQL kết quả sẽ giống như sau:
SELECT nimi FROM test ORDER BY nimi COLLATE "et_EE" ASC;
Nghĩa là, đối chiếu được ghi đè trong ORDER BY
chứ không phải trong SELECT
mệnh đề. Tuy nhiên, nếu bạn cần sử dụng nó trong WHERE
, bạn có thể sử dụng Func()
trong annotate()
.