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