2013-06-18 1 views
2

https://docs.djangoproject.com/en/1.5/intro/tutorial01/장고 튜토리얼 1 부 내가 장고 튜토리얼을 다음과 p.choice_set.all은() 내가 얻을라고 파트 1의 끝 부분입니다

(p.choice_set.all()는 역순으로 반환) 역순으로 표시합니다. 예를 들어

I 얻을 : 나는 반대 순서를 얻을 왜 그냥 다시

어떤 생각을 해킹,별로, 하늘 : 그냥, 다시별로 대신을 스카이 해킹? 표시된 자습서와 동일한 순서로 입력했습니다.

저는 PostgreSQL을 사용하고 있습니다.

+1

필드로 주문 하시겠습니까? 분명히 두 경우 모두'choice_text'에 의해 정렬되지 않습니다. 순서가 지정되지 않은 경우 기본값은 'id'입니다. –

+0

자습서의이 부분 : # 그리고 그 반대의 경우 : 폴링 객체가 Choice 객체에 액세스합니다. >>> p.choice_set.all() [<선택 : 많지 않음>, <선택 : 하늘>, <선택 : 다시 해킹>] 나는 그걸 뒤쪽으로^..... 그냥 다시 해킹하고있다. , The Sky, Not much –

+1

데이터베이스 문제 일 수 있습니까? 반대로 표시됩니다. 아마 가이드가 최신이 아니거나 그들은 다른 db –

답변

2

당신이 명시 적으로 order_by()하지 않는 결과가 반환됩니다 주문 보장이 없다면

. PostgreSQL에 대해서는 잘 모르겠지만 실제로는 인덱스 된 컬럼을 기반으로 행의 서브 세트를 선택하는 경우에는 인덱스에 따라 정렬됩니다. 그러나 모든 행을 선택하는 경우에는 테이블 스캔을 실행하고 결과를 다음 순서로 리턴하십시오. 디스크에 저장됩니다. 만약 당신이 행을 삭제 한 경우

디스크 순서에 관해서

, 다음은 ... 다음에 행을 삽입 할 때 해당 행에 의해 사용되는 공간을 작성하려고, 그래서 당신이 있다면 것이다

ID Name 
1 Bob 
2 Fred 
3 Jim 

은 ... 다음 ... 당신이 얻을하는 SELECT * FROM my_table 주문 4, 2를 반환 지적하는

ID Name 
4 Jeff 
2 Fred 
3 Jim 

을 ... 다음, 첫 번째 행을 삭제 새에 추가 3 인 반면 SELECT * FROM my_table WHERE id > 1은 2, 3, 4 순으로 반환합니다 (

).
+0

그래서 보장이 없으며 이것이 PostgreSQL의 작동 방식이라고 할 수 있습니다. 매우 억류 된 통찰력. 감사. 보증하지 않습니다. 흠. –

+1

@klandshome PostgreSQL *이 항상 작동하는 것은 아닙니다. 특별한 경우에만 해당됩니다. 테이블을 삭제하고 다시 작성하면 다른 순서로 가져올 수 있습니다. – Aya

+1

@klandshome 참고 사항 [이 스레드] (http://postgresql.1045698.n5.nabble.com/default-ordering-of-query-result-are-they-always-guarantee-td1928356.html). – Aya

1

간단한 설명 : 당신이 경외 순서를 얻고있는 이유

당신이 id.And으로 정렬됩니다 사용하지 않는 경우는, order_by()으로 필드를 주문할 수는 이잖아.

당신은 루프 간단하여 확인할 수 있습니다

for item in p.choice_set.all(): 
    print item.id 

감사

+0

기본 순서는 내림차순 오름차순 오름차순 –

+0

ID로 정렬합니다. 그 정도는 우리가 알고 있습니다. 루프가 돌아가서 역순으로 인쇄되었습니다 ... 15 14 –

관련 문제