2016-07-25 2 views
2

ViewSet의 결과에 페이지 매김을 시도하고 있지만 데이터의 페이지 매김에 대한 응답을 얻을 수 없습니다.DRF pagination_class가 페이지 매김 결과를 반환하지 않습니다.

글로벌 페이지 매김을 설정하면 잘 작동하지만 한 클래스에서만 페이지 매김을 원하기 때문에 GenericAPIView에서 오는 모든 뷰/뷰 세트를 무시하고 싶지 않습니다. 나는 기본 설정을 제거하면

""" 
don't want to do this, but this works showing that my view is based off of `GenericAPIView`. 

# settings.py 
""" 
REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination' 
} 

이보기 페이지가 매겨진 결과

이 완전히 가능해야 docs의 모든 표시에서
# views.py 
from rest_framework.viewsets import ModelViewSet 

class ClipViewSet(ModelViewSet): 
    serializer_class = ClipSerializer 
    queryset = Clip.objects.all() 
    pagination_class = PageNumberPagination 

을 잃고, 나의 프로젝트는 왜 모르겠어요 작동 안함. 장고 1.9.7 및 DRF 3.4.0을 사용하고 있습니다.

+0

올바른 'page_size'를 사용하고 있습니까? 보기에서 더 작은 값으로 설정하여 시도해보십시오. –

+0

예 현재 11 개의 결과가 있고'page_size'를 5로 설정했고 페이지 매김을하지 않습니다 (설정에서 기본값을 설정할 때를 제외하고). – awwester

+0

버그가 될 것 같습니다. DRF의 github 저장소에서 문제를 열 ​​수 있습니다. –

답변

1

이것은 버그가 아닙니다. source code에서 볼 수 있듯이 PageNumberPagination의 기본 페이지 크기는 None입니다. 즉, 페이지 매김 클래스를 명시 적으로 지정 했더라도 페이지 매김을 사용할 수 없음을 의미합니다.

당신은 페이지 매김을 활성화 할 수 있도록 page_size 필요로 PageNumberPagination를 서브 클래 싱해야합니다

class MyPageNumberPagination(PageNumberPagination): 
    page_size = 5 

class ClipViewSet(ModelViewSet): 
    pagination_class = MyPageNumberPagination 

는하지 뷰에서 매기기 클래스에 page_size를 설정할 필요가 있습니다.

또는 전역 설정에서 페이지 크기를 넣어 :

REST_FRAMEWORK = { 
    'PAGE_SIZE': 5 
} 

그런 다음 직접 PageNumberPagination 사용할 수 있습니다.

+0

나는 그것이 버그라고 믿습니다. 서로 다른보기에서 다른 페이지 크기를 선택할 수 없도록하려는 경우 최소한 문서 문제가 있습니다. 하지만 그래, 나는 같은 결론에 도달했고, stackoverflow보다는 github 문제의 범위에서 더 많이 움직였다. 다른 사람들에게 이걸보고 싶다면 - https://github.com/tomchristie/django-rest-framework/issues/4304 – awwester

+0

서로 다른 페이지 크기를 다른 뷰에 사용할 수 있습니다. 다른 하위 클래스 인'PageNumberPagination'을 사용해야합니다. 원하는 페이지 크기 ([docs] (http://www.django-rest-framework.org/api-guide/pagination/#configuration)에 명시된대로). 그러나 나는 그것이 매우 직관적이고 편리한 디자인 IMHO가 아니라고 동의한다. –

+0

이것은 톰이 오늘 아침 master에서 업데이트 한 문서의 문제가되어 버렸습니다. (뷰에서'pagination_class'를 사용하려면'PAGE_SIZE' 설정이 필요합니다.) 이것이 혼란의 길로 인도했습니다. – awwester

관련 문제