sql >> Base de Datos >  >> RDS >> PostgreSQL

La paginación de Django Rest Framework cuenta extremadamente lenta

El problema es que la consulta utilizada para contar es la misma potencialmente compleja que se utiliza para obtener los datos. Eso es bastante derrochador. PageNumberPagination usa el propio Paginator de Django internamente.

Para simplificar la consulta del recuento, anule la clase de paginador DRF que utiliza:

from django.core.paginator import Paginator
from django.utils.functional import cached_property
from rest_framework.pagination import PageNumberPagination

class FasterDjangoPaginator(Paginator):
    @cached_property
    def count(self):
        # only select 'id' for counting, much cheaper
        return self.object_list.values('id').count()


class FasterPageNumberPagination(PageNumberPagination):
    django_paginator_class = FasterDjangoPaginator