aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rest_framework/serializers.py24
-rw-r--r--rest_framework/tests/serializer.py15
2 files changed, 14 insertions, 25 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 80287522..25790dbc 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -285,20 +285,6 @@ class BaseSerializer(Field):
"""
Deserialize primitives -> objects.
"""
- if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
- object_list = list()
- error_list = list()
- for count, item in enumerate(data):
- obj = self.from_native(item, None)
- if self._errors:
- error_list.append((count, self._errors))
- object_list.append(obj)
- if not error_list:
- return object_list
-
- self._errors = error_list
- return None
-
self._errors = {}
if data is not None or files is not None:
attrs = self.restore_fields(data, files)
@@ -364,7 +350,15 @@ class BaseSerializer(Field):
'Use the `many=True` flag when instantiating the serializer.',
PendingDeprecationWarning, stacklevel=3)
- ret = self.from_native(data, files)
+ if many:
+ ret = []
+ errors = []
+ for item in data:
+ ret.append(self.from_native(item, None))
+ errors.append(self._errors)
+ self._errors = any(errors) and errors or []
+ else:
+ ret = self.from_native(data, files)
if not self._errors:
self.object = ret
diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py
index 33910936..394af827 100644
--- a/rest_framework/tests/serializer.py
+++ b/rest_framework/tests/serializer.py
@@ -273,9 +273,9 @@ class ValidationTests(TestCase):
self.assertEqual(
serializer.errors,
[
- (0, {'non_field_errors': ['Invalid data']}),
- (1, {'non_field_errors': ['Invalid data']}),
- (2, {'non_field_errors': ['Invalid data']})
+ {'non_field_errors': ['Invalid data']},
+ {'non_field_errors': ['Invalid data']},
+ {'non_field_errors': ['Invalid data']}
]
)
@@ -1108,10 +1108,5 @@ class DeserializeListTestCase(TestCase):
serializer = CommentSerializer(data=data)
self.assertFalse(serializer.is_valid())
- self.assertTrue(isinstance(serializer.errors, list))
- self.assertEqual(1, len(serializer.errors))
- expected = (1, {'email': ['This field is required.']})
- self.assertEqual(
- serializer.errors[0],
- expected
- )
+ expected = [{}, {'email': [u'This field is required.']}, {}]
+ self.assertEqual(serializer.errors, expected)