From eb286eadb96ece5132e951be0f80fcd9b2d0710b Mon Sep 17 00:00:00 2001 From: Yin Jifeng Date: Wed, 14 May 2014 23:57:22 +0800 Subject: [PATCH] add many=True to BasePaginationSerializer's results_field --- rest_framework/pagination.py | 6 ++++-- tests/test_pagination.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index d51ea929b..b750f309c 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -43,8 +43,9 @@ class DefaultObjectSerializer(serializers.Field): as the default. """ - def __init__(self, source=None, context=None): + def __init__(self, source=None, context=None, many=False): # Note: Swallow context kwarg - only required for eg. ModelSerializer. + # Note: Swallow many kwarg - required for eg. serializing a list. super(DefaultObjectSerializer, self).__init__(source=source) @@ -82,7 +83,8 @@ class BasePaginationSerializer(serializers.Serializer): else: context_kwarg = {} - self.fields[results_field] = object_serializer(source='object_list', **context_kwarg) + # we expect an array-like data structure here + self.fields[results_field] = object_serializer(source='object_list', many=True, **context_kwarg) class PaginationSerializer(BasePaginationSerializer): diff --git a/tests/test_pagination.py b/tests/test_pagination.py index 293146c08..7b558ce5d 100644 --- a/tests/test_pagination.py +++ b/tests/test_pagination.py @@ -518,3 +518,35 @@ class TestNonIntegerPagination(TestCase): 'objects': objects[2:] } self.assertEqual(serializer.data, expected) + + +# Tests for many=True in pagination.BasePaginationSerializer + +class BasicSerializer(serializers.Serializer): + id = serializers.Field() + text = serializers.Field() + + +class BasicPaginationSerializer(pagination.BasePaginationSerializer): + + class Meta: + object_serializer_class = BasicSerializer + + +class TestNonQuerySetPagination(TestCase): + """ + Tests for generic data structures which is not a django queryset + """ + + def setUp(self): + self.data = [ + {'id': i, 'text': i} + for i in range(13) + ] + self.paginator = Paginator(self.data, 10) + + def test_unpaginated(self): + first_page = self.paginator.page(1) + serializer = BasicPaginationSerializer(instance=first_page) + serializer.data + self.assertEqual(serializer.data['results'], self.data[:self.paginator.per_page])