From 1abd50143d88b8d5d58fa0994f597f54860d8ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Padilla?= Date: Tue, 6 Oct 2015 08:35:59 -0400 Subject: [PATCH] Fix #3434 --- rest_framework/serializers.py | 29 ++++++++++++++++++---------- tests/test_serializer_bulk_update.py | 2 ++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 5aef1df69..7a7448a6b 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -91,7 +91,7 @@ class BaseSerializer(Field): self.initial_data = data self.partial = kwargs.pop('partial', False) self._context = kwargs.pop('context', {}) - kwargs.pop('many', None) + self.many = kwargs.pop('many', None) super(BaseSerializer, self).__init__(**kwargs) def __new__(cls, *args, **kwargs): @@ -212,10 +212,10 @@ class BaseSerializer(Field): try: self._validated_data = self.run_validation(self.initial_data) except ValidationError as exc: - self._validated_data = {} + self._validated_data = [] if self.many else {} self._errors = exc.detail else: - self._errors = {} + self._errors = [] if self.many else {} if self._errors and raise_exception: raise ValidationError(self.errors) @@ -670,16 +670,25 @@ class ListSerializer(BaseSerializer): # Allows renderers such as HTMLFormRenderer to get the full field info. @property - def data(self): - ret = super(ListSerializer, self).data + def errors(self): + ret = super(ListSerializer, self).errors + + if ret == {}: + return ReturnList([], serializer=self) + + if isinstance(ret, dict): + return ReturnDict(ret, serializer=self) + return ReturnList(ret, serializer=self) @property - def errors(self): - ret = super(ListSerializer, self).errors - if isinstance(ret, dict): - return ReturnDict(ret, serializer=self) - return ReturnList(ret, serializer=self) + def validated_data(self): + validated_data = super(ListSerializer, self).validated_data + + if validated_data == {}: + return ReturnList([], serializer=self) + + return validated_data # ModelSerializer & HyperlinkedModelSerializer diff --git a/tests/test_serializer_bulk_update.py b/tests/test_serializer_bulk_update.py index 8d7240a7b..567a32507 100644 --- a/tests/test_serializer_bulk_update.py +++ b/tests/test_serializer_bulk_update.py @@ -46,6 +46,7 @@ class BulkCreateSerializerTests(TestCase): serializer = self.BookSerializer(data=data, many=True) self.assertEqual(serializer.is_valid(), True) self.assertEqual(serializer.validated_data, data) + self.assertEqual(serializer.errors, []) def test_bulk_create_errors(self): """ @@ -76,6 +77,7 @@ class BulkCreateSerializerTests(TestCase): serializer = self.BookSerializer(data=data, many=True) self.assertEqual(serializer.is_valid(), False) self.assertEqual(serializer.errors, expected_errors) + self.assertEqual(serializer.validated_data, []) def test_invalid_list_datatype(self): """