Django - Как отсортировать набор запросов по количеству символов в поле
MyModel:
name = models.CharField(max_length=255)
Я пытаюсь сортировать запрос. Я просто думаю об этом:
obj = MyModel.objects.all().sort_by(-len(name)) #???
Любая идея?
Ответы
Ответ 1
вам, возможно, придется сортировать это в python..
sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True)
или я соврал (быстрый поиск в Google обнаружил следующее)
MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
Ответ 2
Новая горячая точка (от Django 1.8 или около того) Length()
from django.db.models.functions import Length
obj = MyModel.objects.all().order_by(Length(name).asc())
Ответ 3
Конечно, вы можете отсортировать результаты с помощью Python sorted
, но это не идеально. Вместо этого вы можете попробовать следующее:
MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
Ответ 4
Вам нужно использовать аргумент extra
для передачи функции SQL:
obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)'])
Обратите внимание, что это db-specific: MySQL использует LENGTH
, другие могут использовать LEN
.