2010-02-16 4 views
0

Мой вопрос: exactly like this one, за исключением того, что это запрос, возвращаемый в Django.Django alphanumeric sort in order_by

Я хочу поля, возвращенное

text_all = RawText.objects.filter(id__contains=county.short_code).order_by('id') 

быть возвращены как

1,1 
2,1 
10,1 

вместо:

1,1 
10,1 
2,1 

Что я могу сделать? Нотабене ID - это поле символов, это должно быть из-за запятых.

Спасибо!

+0

Желаешь сортировки происходит на вашем конце, или в базе данных? order_by() - это просто Django-способ сказать ORDER BY базе данных. –

+0

по внешнему виду вы явно делаете что-то не так с вашей структурой. –

ответ

0

Первый подход: наличие двух дополнительных числовых столбцов в модели RawText, первый столбец будет соответствовать вашей первой части идентификатора, а второй столбец соответствует второй части вашего идентификатора. Таким образом, вид тривиален:

text_all = RawText.objects.filter(id__contains=county.short_code).order_by('first_part', 'second_part') 

Альтернативный подход: есть сортировка делается в вашем приложении:

  1. Извлеките два числовых части ваших идентификаторов
  2. Рассортируйте QuerySet

Еще один подход: вы можете сделать свой id вместо char равным десятичному типу, таким образом вы можете просто отсортировать его как числовое:

1.1 
2.1 
10.1 
1

Если ваш id представляет десятичное число, вам лучше использовать правый тип данных в базе данных и принять решение отображать символ ',' в другом месте (возможно, играя с интернационализацией).

В противном случае вам придется написать свой собственный метод сортировки на уровне приложения после получения данных.

1

Вы можете сделать ваш текстовое поле фиксированной длины, поэтому вместо

1,1 
10,1 
2,1 

Вы бы

001,1 
002,1 
010,1