PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Conteggio estremamente lento dell'impaginazione di Django Rest Framework

Il problema è che la query utilizzata per contare è la stessa potenzialmente complessa utilizzata per recuperare i dati. È piuttosto dispendioso. PageNumberPagination utilizza il Paginator di Django internamente.

Per semplificare la query per il conteggio, eseguire l'override della classe dell'impaginatore che DRF utilizza:

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