add many=True to BasePaginationSerializer's results_field

This commit is contained in:
Yin Jifeng 2014-05-14 23:57:22 +08:00
parent 15c2c58b43
commit eb286eadb9
2 changed files with 36 additions and 2 deletions

View File

@ -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):

View File

@ -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])