mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +03:00
Tweak implementation, and use FormSet style errors
This commit is contained in:
parent
53b58a5059
commit
68683b2ea2
|
@ -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):
|
||||||
'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):
|
||||||
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):
|
||||||
|
|
||||||
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
|
|
||||||
)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user