mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-02 11:30:12 +03:00
Add Offset&Limit pagination support
This commit is contained in:
parent
bf227649f4
commit
00dc59c289
|
@ -190,6 +190,25 @@ class DestroyModelMixin(object):
|
||||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class OffsetLimitPaginationMixin(object):
|
||||||
|
offset_kwarg = 'offset'
|
||||||
|
paginate_by_param = 'limit'
|
||||||
|
pagination_serializer_class = pagination.OffsetLimitPaginationSerializer
|
||||||
|
|
||||||
|
def paginate_queryset(self, queryset):
|
||||||
|
limit = self.get_paginate_by()
|
||||||
|
if not limit:
|
||||||
|
return # pagination not configured
|
||||||
|
offset_kwarg = self.kwargs.get(self.offset_kwarg)
|
||||||
|
offset_query_param = self.request.QUERY_PARAMS.get(self.offset_kwarg)
|
||||||
|
offset = offset_kwarg or offset_query_param or 0
|
||||||
|
try:
|
||||||
|
offset_number = pagination.strict_positive_int(offset)
|
||||||
|
except ValueError:
|
||||||
|
offset_number = 0
|
||||||
|
return pagination.OffsetLimitPage(queryset, offset_number, limit)
|
||||||
|
|
||||||
|
|
||||||
class LinkPaginationMixin(object):
|
class LinkPaginationMixin(object):
|
||||||
pagination_serializer_class = pagination.LinkPaginationSerializer
|
pagination_serializer_class = pagination.LinkPaginationSerializer
|
||||||
|
|
||||||
|
|
|
@ -150,3 +150,17 @@ class LinkPaginationSerializer(PaginationSerializer):
|
||||||
if (rel in self.relations and link is not None)
|
if (rel in self.relations and link is not None)
|
||||||
]
|
]
|
||||||
return {'Link': ', '.join(link_keader_items)}
|
return {'Link': ', '.join(link_keader_items)}
|
||||||
|
|
||||||
|
|
||||||
|
class OffsetLimitPage(object):
|
||||||
|
"""
|
||||||
|
A base class to allow offset and limit when listing a queryset.
|
||||||
|
"""
|
||||||
|
def __init__(self, queryset, offset, limit):
|
||||||
|
self.count = queryset.count()
|
||||||
|
self.object_list = queryset[offset:offset + limit]
|
||||||
|
|
||||||
|
|
||||||
|
class OffsetLimitPaginationSerializer(BasePaginationSerializer):
|
||||||
|
""" OffsetLimitPage serializer """
|
||||||
|
count = serializers.Field()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user