mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-07 22:04:48 +03:00
Fix #3434
This commit is contained in:
parent
6fb96e93ef
commit
1abd50143d
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user