2016-07-29 10 views
4

Ich habe CacheResponseMixin von Drf-Erweiterungen zu meinem Viewset hinzugefügt, aber nur die erste Seite wird zwischengespeichert und für alle anderen Seiten z. /? Page = 2 einfach gibt die Ergebnisse für Seite 1.CacheResponseMixin funktioniert nicht mit Seitennummerierung

class ProductViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): 
    queryset = Product.objects.filter(withdrawn=False) 
    serializer_class = ProductSerializer 
    pagination_class = LargeResultsSetPagination 

Ich bin mit django 1,85. Ist das ein Fehler oder fehlt mir etwas?

Antwort

0

Finale fix einen benutzerdefinierten Schlüssel-Konstruktor:

from rest_framework_extensions.cache.mixins import CacheResponseMixin 
from rest_framework_extensions.key_constructor.constructors import (
    DefaultKeyConstructor 
) 
from rest_framework_extensions.key_constructor.bits import (
    QueryParamsKeyBit 
) 

class QueryParamsKeyConstructor(DefaultKeyConstructor): 
    all_query_params = bits.QueryParamsKeyBit() 

class ProductViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): 
    queryset = Product.objects.filter(withdrawn=False) 
    serializer_class = ProductSerializer 
    pagination_class = LargeResultsSetPagination 
    list_cache_key_func = QueryParamsKeyConstructor() 
1

Dies ist nicht gut dokumentiert, aber beim Lesen des Quellcodes (für die Klasse PaginationKeyBit) sieht es so aus, als müssten Sie entweder page_kwarg = 'page' oder paginate_by_param = 'page' zu Ihrer Viewset-Klasse hinzufügen.