Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » БД сортировка. сначало кириллица а потом латиница [RSS Feed]

#1 Июнь 18, 2013 20:49:07

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

привет

class Car(models.Model):
    name = models.CharField(...)
    ....
делаю выборку
Car.objects.filter(...).order_by('name')
Она возвращает сортированный кверисет. но сортировка сначало латиница, потом кирилица. как сделать чтобы сначала была кирилица?
БД sqlite

Офлайн

#2 Июнь 18, 2013 23:17:28

Sergei
От:
Зарегистрирован: 2011-10-04
Сообщения: 29
Репутация: +  4  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

вообще order_by('-name') будет сортировать в обратном порядке (минус перед именем поля),
но я не думаю, что вас это устроит - вы бы наверное хотели чтобы и кириллица и латиница при этом сами по себе были бы сортированы в естественном порядке (т.е. кириллица А->Я, а не наоборот)?
С ходу красивого решения не приходит в голову.
Навскидку - либо на лету делать анализ текстового поля, либо завести отдельное поле для сортировки, куда прописывать индекс при записи и при выборке сортировать по нему.



Офлайн

#3 Июнь 19, 2013 06:43:07

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

да. -name мне не катит.
order('name') сортирует A-zА-я. А мне надо А-яA-z. Если стандартными средствами нельзя, то да, наверное добавлю поле. Типа ru_eng

Офлайн

#4 Июнь 19, 2013 08:13:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

Вариант сделать две выборки, первую

latin="abcdef"
Car.objects.filter(name__istartswith__in=latin).order_by("name")
аналогично вторую и объединить их.



Офлайн

#5 Июнь 19, 2013 08:22:30

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

спасибо. То что надо. А как объеденить два кверисета? Пробовал extend. Но у кверистеа вроде нет extend'a

Офлайн

#6 Июнь 19, 2013 08:58:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

а кверисет - это итератор,

import itertools
x=(i for i in xrange(10) )
y=(i for i in xrange(20,30,2))
for i in itertools.chain(x,y):
    print i

по аналогии



Офлайн

#7 Июнь 19, 2013 15:45:20

Sergei
От:
Зарегистрирован: 2011-10-04
Сообщения: 29
Репутация: +  4  -
Профиль   Отправить e-mail  

БД сортировка. сначало кириллица а потом латиница

у вас простые кверисеты (модель одна, без экстра), так что просто qs = qs1 | qs2



Офлайн

  • Начало
  • » Django
  • » БД сортировка. сначало кириллица а потом латиница[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version