Как кэшировать результаты кверисетов в ListAPIView при включенных пагинации, фильтрации, упорядочивании?
Как я могу кэшировать результаты запросов (и аннулировать кэш) в ListAPIView
, когда возможны пагинация, фильтрация и упорядочивание? Обратите внимание, что мне нужно аннулировать кэш для каждой компании, поэтому если для конкретной компании создается новый объект Item
, мне нужно аннулировать его.
from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination
class CustomPaginationClass(PageNumberPagination):
page_size = "30"
page_size_query_param = 'perPage'
max_page_size = 10000
class ItemListApiView(ListAPIView):
model = Item
authentication_classes = (SessionAuthentication, )
serializer_class = ItemSerializer
permission_classes = (HasAccessToItems, )
pagination_class = CustomPaginationClass
filter_backends = (filters.SearchFilter, DjangoFilterBackend, filters.OrderingFilter, )
search_fields = ('user__name', )
filter_fields = {
'category_type__name': ['exact'],
'item_type__name': ['exact'],
'approver__name': ['exact'],
'status': ['exact', 'in']
}
ordering_fields = '__all__'
def get_queryset(self):
qs = Item.objects.filter(company=self.request.user.company).select_related('company')
if not self.request.user.is_all_items_enabled:
qs = qs.filter(approver=self.request.user)
return qs.order_by('-created')
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)