2012-06-13 1 views
1

Django에서 검색을 수행하지 않는 한 약 300 개의 개체를 반환하는 일반 목록보기가 있습니다.Django에서 쿼리 세트의 하위 집합 만 처리하고 원래 쿼리 세트를 반환합니다.

개체가 10 개만 표시되도록 페이지 매김을 설정했습니다.

그래서 데이터베이스를 쿼리 한 다음 개체를 반복하고 처리 한 다음 추가 값을 표시 전에 추가합니다. 모든 300 개의 객체가 처리를 완료하고 처리 후 페이지 매김이 수행됩니다. 그래서 성능 향상을 위해 표시 할 개체에 대해서만 처리를 수행하려고합니다.

제가

이제 I 처리 할 페이지 3 페이지 2, 21-30 페이지 (1), 11-20 0-10 대한 처리되어야 검색어 세트 내의 오브젝트 등의 인덱스를 계산 표시 범위에있는 객체 만 전체 queryset을 반환합니다 (그래서 장르별보기가 예상대로 작동 함).

처음에 나는 시도 :

for object in queryset[slice_start:slice_end] : 
    # process things here 

return queryset 

그러나 슬라이스는 새로운 검색어 세트를 반환하는 것, 그리고 원래의 검색어 객체는 계산 된 값 중 하나를 필요가 없습니다. 이제

index = -1 
for object in queryset: 
    index += 1 
    if index < slice_start or index > slice_end : continue 
    # process things here 
return queryset 

이 작동하지만, 파이썬 오히려 해키 및 unelegant 보인다

현재 내 솔루션입니다. 더 평이한 방법이 있나요? 당신이 장고의 Paginator 클래스 (docs)를 사용하는 경우

+0

Django의 Paginator 클래스를 사용하고 있습니까? –

답변

2

, 당신은 현재 페이지를 요청하고보기에서 해당 개체 반복 할 수 있습니다 : 당신은 요청의 매개 변수에서 current_page에 대한 값을 얻을 수 있습니다

from django.core.paginator import Paginator 

# in the view: 
p = Paginator(objects, 2) 
page = p.page(current_page) 
for o in page.object_list: 
    # do processing 
    pass 

을 (예 : page 매개 변수가 request.GET).

+0

paginator 객체를 일반 뷰에서 어떻게 가져 옵니까? 페이지 매김이 켜져 있으므로 다른 페이지를 만드는 것이 불필요하다고 가정합니다. –

1

page.object_list의 결과에 대한 처리를 수행해야하며 해당 페이지에 대한 개체 만 포함되어 있어야합니다.

관련 문제