mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 12:30:11 +03:00
Merge dfc868664f
into 9e72736af8
This commit is contained in:
commit
34bae385fd
|
@ -172,12 +172,12 @@ class GenericAPIView(views.APIView):
|
||||||
return None
|
return None
|
||||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
||||||
|
|
||||||
def get_paginated_response(self, data):
|
def get_paginated_response(self, data, extra_fields={}):
|
||||||
"""
|
"""
|
||||||
Return a paginated style `Response` object for the given output data.
|
Return a paginated style `Response` object for the given output data.
|
||||||
"""
|
"""
|
||||||
assert self.paginator is not None
|
assert self.paginator is not None
|
||||||
return self.paginator.get_paginated_response(data)
|
return self.paginator.get_paginated_response(data, extra_fields)
|
||||||
|
|
||||||
|
|
||||||
# Concrete view classes that provide method handlers
|
# Concrete view classes that provide method handlers
|
||||||
|
|
|
@ -42,7 +42,11 @@ class ListModelMixin(object):
|
||||||
page = self.paginate_queryset(queryset)
|
page = self.paginate_queryset(queryset)
|
||||||
if page is not None:
|
if page is not None:
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
return self.get_paginated_response(serializer.data)
|
if 'extra_fields' in kwargs:
|
||||||
|
extra_fields = kwargs['extra_fields']
|
||||||
|
else:
|
||||||
|
extra_fields = {}
|
||||||
|
return self.get_paginated_response(serializer.data, extra_fields)
|
||||||
|
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
|
@ -149,7 +149,7 @@ class BasePagination(object):
|
||||||
def paginate_queryset(self, queryset, request, view=None): # pragma: no cover
|
def paginate_queryset(self, queryset, request, view=None): # pragma: no cover
|
||||||
raise NotImplementedError('paginate_queryset() must be implemented.')
|
raise NotImplementedError('paginate_queryset() must be implemented.')
|
||||||
|
|
||||||
def get_paginated_response(self, data): # pragma: no cover
|
def get_paginated_response(self, data, extra_fields={}): # pragma: no cover
|
||||||
raise NotImplementedError('get_paginated_response() must be implemented.')
|
raise NotImplementedError('get_paginated_response() must be implemented.')
|
||||||
|
|
||||||
def to_html(self): # pragma: no cover
|
def to_html(self): # pragma: no cover
|
||||||
|
@ -225,13 +225,19 @@ class PageNumberPagination(BasePagination):
|
||||||
self.request = request
|
self.request = request
|
||||||
return list(self.page)
|
return list(self.page)
|
||||||
|
|
||||||
def get_paginated_response(self, data):
|
def get_paginated_dictionary(self, data):
|
||||||
return Response(OrderedDict([
|
return OrderedDict([
|
||||||
('count', self.page.paginator.count),
|
('count', self.page.paginator.count),
|
||||||
('next', self.get_next_link()),
|
('next', self.get_next_link()),
|
||||||
('previous', self.get_previous_link()),
|
('previous', self.get_previous_link()),
|
||||||
('results', data)
|
('results', data)
|
||||||
]))
|
])
|
||||||
|
|
||||||
|
def get_paginated_response(self, data, extra_fields={}):
|
||||||
|
ordered_dict = self.get_paginated_dictionary(data)
|
||||||
|
for key in extra_fields:
|
||||||
|
ordered_dict.__setitem__(key, extra_fields[key])
|
||||||
|
return Response(ordered_dict)
|
||||||
|
|
||||||
def get_page_size(self, request):
|
def get_page_size(self, request):
|
||||||
if self.page_size_query_param:
|
if self.page_size_query_param:
|
||||||
|
@ -346,13 +352,19 @@ class LimitOffsetPagination(BasePagination):
|
||||||
return []
|
return []
|
||||||
return list(queryset[self.offset:self.offset + self.limit])
|
return list(queryset[self.offset:self.offset + self.limit])
|
||||||
|
|
||||||
def get_paginated_response(self, data):
|
def get_paginated_dictionary(self, data):
|
||||||
return Response(OrderedDict([
|
return OrderedDict([
|
||||||
('count', self.count),
|
('count', self.count),
|
||||||
('next', self.get_next_link()),
|
('next', self.get_next_link()),
|
||||||
('previous', self.get_previous_link()),
|
('previous', self.get_previous_link()),
|
||||||
('results', data)
|
('results', data)
|
||||||
]))
|
])
|
||||||
|
|
||||||
|
def get_paginated_response(self, data, extra_fields={}):
|
||||||
|
ordered_dict = self.get_paginated_dictionary(data)
|
||||||
|
for key in extra_fields:
|
||||||
|
ordered_dict.__setitem__(key, extra_fields[key])
|
||||||
|
return Response(ordered_dict)
|
||||||
|
|
||||||
def get_limit(self, request):
|
def get_limit(self, request):
|
||||||
if self.limit_query_param:
|
if self.limit_query_param:
|
||||||
|
@ -758,12 +770,18 @@ class CursorPagination(BasePagination):
|
||||||
attr = getattr(instance, field_name)
|
attr = getattr(instance, field_name)
|
||||||
return six.text_type(attr)
|
return six.text_type(attr)
|
||||||
|
|
||||||
def get_paginated_response(self, data):
|
def get_paginated_dictionary(self, data):
|
||||||
return Response(OrderedDict([
|
return OrderedDict([
|
||||||
('next', self.get_next_link()),
|
('next', self.get_next_link()),
|
||||||
('previous', self.get_previous_link()),
|
('previous', self.get_previous_link()),
|
||||||
('results', data)
|
('results', data)
|
||||||
]))
|
])
|
||||||
|
|
||||||
|
def get_paginated_response(self, data, extra_fields={}):
|
||||||
|
ordered_dict = self.get_paginated_dictionary(data)
|
||||||
|
for key in extra_fields:
|
||||||
|
ordered_dict.__setitem__(key, extra_fields[key])
|
||||||
|
return Response(ordered_dict)
|
||||||
|
|
||||||
def get_html_context(self):
|
def get_html_context(self):
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user