Commit 68683b2e by Tom Christie

Tweak implementation, and use FormSet style errors

parent 53b58a50
...@@ -285,20 +285,6 @@ class BaseSerializer(Field): ...@@ -285,20 +285,6 @@ class BaseSerializer(Field):
""" """
Deserialize primitives -> objects. 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 = {} self._errors = {}
if data is not None or files is not None: if data is not None or files is not None:
attrs = self.restore_fields(data, files) attrs = self.restore_fields(data, files)
...@@ -364,7 +350,15 @@ class BaseSerializer(Field): ...@@ -364,7 +350,15 @@ class BaseSerializer(Field):
'Use the `many=True` flag when instantiating the serializer.', 'Use the `many=True` flag when instantiating the serializer.',
PendingDeprecationWarning, stacklevel=3) 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: if not self._errors:
self.object = ret self.object = ret
......
...@@ -273,9 +273,9 @@ class ValidationTests(TestCase): ...@@ -273,9 +273,9 @@ class ValidationTests(TestCase):
self.assertEqual( self.assertEqual(
serializer.errors, serializer.errors,
[ [
(0, {'non_field_errors': ['Invalid data']}), {'non_field_errors': ['Invalid data']},
(1, {'non_field_errors': ['Invalid data']}), {'non_field_errors': ['Invalid data']},
(2, {'non_field_errors': ['Invalid data']}) {'non_field_errors': ['Invalid data']}
] ]
) )
...@@ -1108,10 +1108,5 @@ class DeserializeListTestCase(TestCase): ...@@ -1108,10 +1108,5 @@ class DeserializeListTestCase(TestCase):
serializer = CommentSerializer(data=data) serializer = CommentSerializer(data=data)
self.assertFalse(serializer.is_valid()) self.assertFalse(serializer.is_valid())
self.assertTrue(isinstance(serializer.errors, list)) expected = [{}, {'email': [u'This field is required.']}, {}]
self.assertEqual(1, len(serializer.errors)) self.assertEqual(serializer.errors, expected)
expected = (1, {'email': ['This field is required.']})
self.assertEqual(
serializer.errors[0],
expected
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment