2016-02-16 9 views
5

Sto riscontrando problemi con l'impaginazione del quadro di riposo django. Ho impostato impaginazione in impostazioni come -Il framework di restituzione di Django ha la precedenza su page_size in ViewSet

'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination', 
'PAGE_SIZE': 1 

Di seguito è riportato il mio viewset.

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 

Desidero impostare una dimensione di pagina diversa per questo viewet. Ho provato a impostare page_size e Paginate_by delle variabili di classe, ma l'elenco è impaginato secondo PAGE_SIZE definito nelle impostazioni. Qualche idea su dove mi sbaglio?

+0

hai provato a impostare 'pagination_class'? – ilse2005

+0

se si desidera impostare un limite massimo rigido per sovrascrivere il metodo get_paginate_by sulle viste generiche. –

+0

pagination_class ha funzionato ma ho dovuto creare una classe di impaginazione personalizzata. – Mangesh

risposta

7

Ho risolto questo problema creando una classe di impaginazione personalizzata. e impostando le pagine desiderate in classe. Ho usato questa classe come pagination_class nel mio viewset.

class ExamplePagination(pagination.PageNumberPagination):  
     page_size = 2 

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 
    pagination_class=ExamplePagination 

Non sono sicuro che ci sia un modo più semplice per questo. questo ha funzionato per me. Ma penso che non sia bello creare una nuova classe solo per cambiare page_size.

Edit - soluzione semplice è impostato piace

pagination.PageNumberPagination.page_size = 100 

in ViewSet.

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 
    pagination.PageNumberPagination.page_size = 100 
+0

cambiando pagination.PageNumberPagination.page_size in diversi viewet non risulta in diverse dimensioni. È impostato solo un page_size –

5

utilizzare la pagina di query params dimensioni per fornire le dimensioni della pagina in modo dinamico ..

from rest_framework.pagination import PageNumberPagination 

class StandardResultsSetPagination(PageNumberPagination): 
    page_size_query_param = 'limit' 

su Predefinito classe impaginazione in impostazioni

REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'StandardResultsSetPagination',} 

Ora nel tuo URL fornire limite come parametro GET.

http://example.com/list/ ? Limite = 100 o 25

+0

Dove inserisci la classe "StandardResultsSetPagination" in modo che "DEFAULT_PAGINATION_CLASS" possa vederlo? – Curtwagner1984

+0

Risposta modificata ... è necessario aggiungere le impostazioni – Naresh

+0

Sì, lo so, intendevo dove si inserisce la classe stessa in modo che l'impostazione DEFAULT_PAGINATION_CLASS in settings.py la vedrà? – Curtwagner1984

1

Nel caso in cui si sta cercando di cambiare la "dimensione della pagina" della classe LimitOffsetPagination, si deve ignorare la variabile default_limit invece di PAGE_SIZE:

from rest_framework import paginationclass 


CustomLimitOffsetPagination(pagination.LimitOffsetPagination): 
    default_limit = 5 
Problemi correlati