2010-02-16 5 views
0

제 질문은 exactly like this one입니다. 단, 장고에서 반환되는 쿼리는 예외입니다.Django 영숫자 정렬 order_by

1,1 
10,1 
2,1 

내가 무엇을 할 수

나는 필드가

1,1 
2,1 
10,1 

보다는으로 반환 할

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

에 의해 반환 싶어? N.B. ID는 char 필드이므로 쉼표로 인해야합니다.

감사합니다.

+0

당신이 당신의 끝에서 발생하는 정렬 또는 데이터베이스에서 원하는 마십시오 거라고 할 수 있을까? order_by()는 데이터베이스에 ORDER BY를 말하는 장고 방식입니다. –

+0

그것의 외모에 의해 당신은 분명히 당신의 구조에 뭔가 잘못된 일을하고 있습니다. –

답변

0

첫 번째 접근법 : RawText 모델에 두 개의 추가 숫자 열이 있으면 첫 번째 열은 ID의 첫 번째 부분에 해당하고 두 번째 열은 ID의 두 번째 부분에 해당합니다. 그런 식으로 정렬은 간단하다 :

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

대체 방법 : 정렬 응용 프로그램에서 수행 한 :

  1. 가의 검색어 귀하의 ID의
  2. 정렬을 두 개의 숫자 부분을 추출

또 다른 방법은 char 대신 id를 Decimal 형식으로 만들 수 있습니다. 그러면 숫자로 정렬 할 수 있습니다.

,210
1.1 
2.1 
10.1 
1

id이 10 진수를 나타낼 경우 데이터베이스에서 올바른 데이터 유형을 사용하고 다른 위치 (어쩌면 국제화로 재생)에서 '숯'을 표시해야합니다.

그렇지 않으면 데이터를 검색 한 후 응용 프로그램 수준에서 고유 한 정렬 방법을 작성해야합니다.

1

당신은 당신의 텍스트 필드 길이를 고정, 그래서 대신

1,1 
10,1 
2,1 

의 당신은

001,1 
002,1 
010,1