2016-04-15 3 views
0

Die Dokumente sagen, ich sollte kostenlos Seitenumbruch erhalten, wenn ich eine generische List oder ListCreateAPIView unterklassiere, aber es gibt keine Anzeichen dafür, dass Paginierung passiert. HierDjango Rest Framework 3.2.3 Seitennummerierung funktioniert nicht für generics.ListCreateAPIView

ist, was ich in den Einstellungen haben ...

REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 
     'rest_framework.pagination.PageNumberPagination', 
    'PAGE_SIZE': 25, 
    'MAX_PAGE_SIZE': 50, 
    'TEST_REQUEST_DEFAULT_FORMAT': 'json', 
    'TEST_REQUEST_RENDERER_CLASSES': (... 
    ), 
    'DEFAULT_FILTER_BACKENDS': (... 
    ) 
} 

Meine Ansicht:

class RequestList(generics.ListCreateAPIView): 

    # set context for serializers 
    def get_serializer_context(self, *args, **kwargs): 
     context = { 
      'request': self.request, 
      'view': self, 
      'format': self.format_kwarg, 
      'request_type_id': 1} 
    return context 

    request_type_code_model_map = { 
     "S": Request.objects.filter(request_type_id=1, status='open'), 
     ...} 

    def get(self, request, request_type_code="S", format=None, *args, **kwargs): 

     queryset = self.request_type_code_model_map.get(
      request_type_code, "S") 
     serializer_class = RequestSerializer 
     serializer = serializer_class(
      instance=queryset, context=self.get_serializer_context(), 
      many=True) 

    return Response(serializer.data) 

Jede Hilfe wäre sehr willkommen. Ich habe versucht, eine benutzerdefinierte Paginator-Klasse zu erstellen, indem ich verschiedene Konfigurationsoptionen in den Einstellungen festlege, aber nichts, was ich tue, scheint irgendeinen Versuch der Paginierung zu machen. Die Seitenumbruch funktioniert für Benutzer und Gruppen, die ViewSets verwenden, aber keine meiner Ansichten, die Generics verwenden. Irgendwelche Ideen, ein Hinweis auf das, was ich vermisse, oder eine Lösung würden sehr geschätzt werden.

Antwort

3

Sie erhalten die Paginierung kostenlos, vorausgesetzt, Sie überschreiben keine Teile, die sie aufrufen. Sie können die list source durchsuchen, um zu sehen, wie es implementiert ist und wie Sie Ihre get Methode schreiben sollten.

+0

Vielen Dank Linovia. Das hat den Trick gemacht. Ich hatte angenommen, dass dies gestern wahrscheinlich der Fall war, und etwas implementiert, das funktionierte, aber mir nicht die sichtbaren Steuerelemente in der browsbaren API brachte. Das war der Schlüssel. Sehr geschätzt! – cjukjones

Verwandte Themen