首页 > 解决方案 > 使用 DRF 缓存 ViewSet:TypeError: _wrapped_view()

问题描述

我只想对 ViewSet 使用缓存太慢:(,使用 Django REST 框架。

我已经这样做了:

...
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_cookie
...
class PRPKViewSet(viewsets.ModelViewSet):
    serializer_class = PrpkSerializer
    queryset = Prpk.objects.all().order_by('begin')
    # Authentification !
    permission_classes = (IsAuthenticated,)
    # Only 'get' method
    http_method_names = ['get']

    # Cache requested url for each user for 2 hours
    # @method_decorator(vary_on_cookie)
    @method_decorator(cache_page(60*2))
    def get_queryset(self):
        """ allow rest api to filter by submissions """
        queryset = Prpk.objects.all().order_by('begin')
        highway = self.request.query_params.get('highway', None)
        if highway is not None:
            queryset = queryset.filter(highway=highway)

        return queryset

但是在查询时,我有这个错误:

TypeError: _wrapped_view() missing 1 required positional argument: 'request'

已安装 Memcached。

那么,我可以只缓存一个 ViewSet(不使用扩展名吗?)?

非常感谢。

F。

标签: djangocachingdjango-rest-frameworkmemcached

解决方案


装饰dispatch而不是get_queryset

@method_decorator(cache_page(60*2))
def dispatch(self, request, *args, **kwargs):
    return super().dispatch(request, *args, **kwargs)

推荐阅读