2012-09-27 2 views
7

PostgreSQL은 기본적으로 NULL 값을 가장 높은 것으로 간주하므로 우선 쿼리를 내림차순으로 오름차순으로 정렬합니다.Django ORM에서 PostgreSQL의 기본 Null 정렬 동작을 변경하는 방법

'NULLS LAST'또는 'NULLS FIRST'를 지정하여 쿼리 나 인덱스 생성시이 동작을 수정할 수 있습니다.

어떻게 원시 쿼리를 사용하지 않고 장고 ORM과 함께 사용할 수 있습니까? 즉, 내 query_set에 qs.order_by("-publish_start")과 같은 것을 추가하면 어떻게 널에 대한 정렬을 지정할 수 있습니까? 또는 필드/색인 선언에 대한 대안으로 사용할 수 있습니다.

답변

9

나는 부울 false < true을 정렬 할 때, extra를 사용하여 널 (null)이 부울을 확인하고,에 의해 어느 쪽이든 (널 (null)로 가장 높은 또는 가장 낮은 값)를 작동 DB 엔진을 수용하는 방법을 보편적 인 것으로 보인다 파악 :

qs = qs.extra(select={'null_start': "publish_start is null"}, 
       order_by=['null_start', '-publish_start']) 
+0

왜냐하면 결과가 NULL 값이고, 다음에'publish_start'가 ASCending으로 정렬되기를 원한다면 order_by 문을 뒤집어 줘야한다는 것입니다. '[ '-null_start', 'publish_start']'. –

+0

'extra'가 삭제되었습니다. 대신 http://stackoverflow.com/a/35494930/15690을 참조하십시오. – blueyed

+0

@blueyed 네, 스택 오버플로에서 4 년 된 답변이 무엇입니까. 그들은 쓸모 없게됩니다. 저것을 downvote 할 필요가 없습니다 ... –

관련 문제