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 | 25 +++++++++++++++++-------- tests/test_serializer_bulk_update.py | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 5aef1df69f..7a7448a6b1 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -91,7 +91,7 @@ def __init__(self, instance=None, data=empty, **kwargs): 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 @@ def is_valid(self, raise_exception=False): 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) @@ -669,18 +669,27 @@ def __repr__(self): # Include a backlink to the serializer class on return objects. # Allows renderers such as HTMLFormRenderer to get the full field info. - @property - def data(self): - ret = super(ListSerializer, self).data - return ReturnList(ret, serializer=self) - @property 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 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 8d7240a7b0..567a32507d 100644 --- a/tests/test_serializer_bulk_update.py +++ b/tests/test_serializer_bulk_update.py @@ -46,6 +46,7 @@ def test_bulk_create_success(self): 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 @@ def test_bulk_create_errors(self): 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): """