Skip to content

Pagination

LimitOffsetPagination

Bases: LimitOffsetPagination

Customized paginator class to limit max objects in list APIs.

Source code in saritasa_drf_tools/pagination.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class LimitOffsetPagination(pagination.LimitOffsetPagination):
    """Customized paginator class to limit max objects in list APIs."""

    def paginate_queryset(
        self,
        queryset: models.QuerySet,
        request: request.Request,
        view: views.APIView | None = None,
    ) -> list[typing.Any] | None:
        """Set view for pagination."""
        self.view = view
        return super().paginate_queryset(queryset, request, view)

    @property
    def max_limit(self) -> int | None:
        """Get limit for page.

        Will become deprecated once this is merged
        https://github.com/encode/django-rest-framework/pull/9107

        """
        max_limit_from_view = getattr(
            self.view,
            "pagination_max_limit",
            None,
        )
        max_limit_from_settings = getattr(
            settings,
            "SARITASA_DRF_MAX_PAGINATION_SIZE",
            None,
        )
        return max_limit_from_view or max_limit_from_settings

    @property
    def default_limit(self) -> int | None:
        """Get default limit for page."""
        default_limit_from_view = getattr(
            self.view,
            "pagination_default_limit",
            None,
        )
        default_limit_from_settings: int = api_settings.PAGE_SIZE  # type: ignore
        return default_limit_from_view or default_limit_from_settings

default_limit property

Get default limit for page.

max_limit property

Get limit for page.

Will become deprecated once this is merged https://github.com/encode/django-rest-framework/pull/9107

paginate_queryset(queryset, request, view=None)

Set view for pagination.

Source code in saritasa_drf_tools/pagination.py
12
13
14
15
16
17
18
19
20
def paginate_queryset(
    self,
    queryset: models.QuerySet,
    request: request.Request,
    view: views.APIView | None = None,
) -> list[typing.Any] | None:
    """Set view for pagination."""
    self.view = view
    return super().paginate_queryset(queryset, request, view)