2016-07-28 8 views
0

Model.objects.all()[start: start+page_size]과 같은 페이징 된 결과에 대한 쿼리를 실행하려고합니다.Django Model Queryset에서 슬라이스

, 그건 내가 여기에 두 번 all()를 호출하면 내가 장고가 두 번 같은 쿼리를 실행 여부, start+page_size < Model.objects.all().count().

내 질문이 있는지 여부를 알고 싶은 말을 나는 또한로드 할 페이지가 더 있는지 알고 싶어

입니다 (슬라이스 작업 [], 하나는 count()). 내가 장고는 파이썬의 모든 DB에서 데이터 조각을 가져, 또는 장고는 SQL 한계로 가져 여부를이 Model.objects.all()[2:9] 같은 Model.objects.all()에 슬라이스 경우

또 다른 질문은 limit 2 to 9

+0

btw, Django의 페이지 매김을위한 적절한 방법은 https://docs.djangoproject.com/en/1.9/topics/pagination/ – Compadre

답변

3
네, 두 개의 쿼리를 만드는

하지만, 이러한이다 "같은 쿼리"가 아닙니다. 하나는 SELECT * FROM mymodel LIMIT <page_size> OFFSET <start>이고 다른 하나는 SELECT COUNT(*) FROM mymodel입니다.

다음
Model.objects.all()[start: start+page_size+1] 

당신은 PAGE_SIZE까지 반복 할 수 있으며, 다음 버튼을 추가하는 경우를 보여

두 개의 쿼리를 피하려면

는 간단한 수정은 당신이 실제로 필요한 것보다 한 번 더 레코드를 요청하는 것입니다 거기에 기록이있다.

+0

여기입니다. 고맙습니다, Daniel. 정말 영리한 트릭! –

+0

'result = Model.objects.all() [a : a + 101]''결과를 슬라이스하면 결과가 [a : a + 100]'이거나 len()'len (result)'를 사용하면 결과는 장고가 두 가지 질문을합니까? –

+0

https://docs.djangoproject.com/en/1.9/ref/models/querysets/#when-querysets-are-evaluated – Compadre

관련 문제