This commit is contained in:
José Padilla 2015-10-06 08:35:59 -04:00 committed by José Padilla
parent 6fb96e93ef
commit 1abd50143d
2 changed files with 21 additions and 10 deletions

View File

@ -91,7 +91,7 @@ class BaseSerializer(Field):
self.initial_data = data self.initial_data = data
self.partial = kwargs.pop('partial', False) self.partial = kwargs.pop('partial', False)
self._context = kwargs.pop('context', {}) self._context = kwargs.pop('context', {})
kwargs.pop('many', None) self.many = kwargs.pop('many', None)
super(BaseSerializer, self).__init__(**kwargs) super(BaseSerializer, self).__init__(**kwargs)
def __new__(cls, *args, **kwargs): def __new__(cls, *args, **kwargs):
@ -212,10 +212,10 @@ class BaseSerializer(Field):
try: try:
self._validated_data = self.run_validation(self.initial_data) self._validated_data = self.run_validation(self.initial_data)
except ValidationError as exc: except ValidationError as exc:
self._validated_data = {} self._validated_data = [] if self.many else {}
self._errors = exc.detail self._errors = exc.detail
else: else:
self._errors = {} self._errors = [] if self.many else {}
if self._errors and raise_exception: if self._errors and raise_exception:
raise ValidationError(self.errors) raise ValidationError(self.errors)
@ -670,16 +670,25 @@ class ListSerializer(BaseSerializer):
# Allows renderers such as HTMLFormRenderer to get the full field info. # Allows renderers such as HTMLFormRenderer to get the full field info.
@property @property
def data(self): def errors(self):
ret = super(ListSerializer, self).data 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) return ReturnList(ret, serializer=self)
@property @property
def errors(self): def validated_data(self):
ret = super(ListSerializer, self).errors validated_data = super(ListSerializer, self).validated_data
if isinstance(ret, dict):
return ReturnDict(ret, serializer=self) if validated_data == {}:
return ReturnList(ret, serializer=self) return ReturnList([], serializer=self)
return validated_data
# ModelSerializer & HyperlinkedModelSerializer # ModelSerializer & HyperlinkedModelSerializer

View File

@ -46,6 +46,7 @@ class BulkCreateSerializerTests(TestCase):
serializer = self.BookSerializer(data=data, many=True) serializer = self.BookSerializer(data=data, many=True)
self.assertEqual(serializer.is_valid(), True) self.assertEqual(serializer.is_valid(), True)
self.assertEqual(serializer.validated_data, data) self.assertEqual(serializer.validated_data, data)
self.assertEqual(serializer.errors, [])
def test_bulk_create_errors(self): def test_bulk_create_errors(self):
""" """
@ -76,6 +77,7 @@ class BulkCreateSerializerTests(TestCase):
serializer = self.BookSerializer(data=data, many=True) serializer = self.BookSerializer(data=data, many=True)
self.assertEqual(serializer.is_valid(), False) self.assertEqual(serializer.is_valid(), False)
self.assertEqual(serializer.errors, expected_errors) self.assertEqual(serializer.errors, expected_errors)
self.assertEqual(serializer.validated_data, [])
def test_invalid_list_datatype(self): def test_invalid_list_datatype(self):
""" """