This commit is contained in:
Daniel Salazar 2016-05-03 16:01:31 +00:00
commit 1e0fc4d19e
2 changed files with 41 additions and 0 deletions

View File

@ -295,6 +295,8 @@ class BaseSerializer(WritableField):
field.initialize(parent=self, field_name=field_name)
try:
field.field_from_native(data, files, field_name, reverted_data)
if field.errors:
self._errors[field_name] = [field.errors]
except ValidationError as err:
self._errors[field_name] = list(err.messages)
@ -435,6 +437,9 @@ class BaseSerializer(WritableField):
Override default so that the serializer can be used as a writable
nested field across relationships.
"""
self._errors = {}
if self.read_only:
return

View File

@ -347,3 +347,39 @@ class NestedModelSerializerUpdateTests(TestCase):
result = deserialize.object
result.save()
self.assertEqual(result.id, john.id)
class PlainObjectWithNestedRepresentationDeserializationTest(TestCase):
def setUp(self):
class ArtistSerializer(serializers.Serializer):
artist_name = serializers.CharField(max_length=100)
artist_origin = serializers.CharField(max_length=100)
class AlbumSerializer(serializers.Serializer):
album_name = serializers.CharField(max_length=100)
artist = ArtistSerializer(source='*')
self.AlbumSerializer = AlbumSerializer
def test_deserialize_invalid_nested_representation_error(self):
"""
Incorrect nested deserialization should return appropiate error data.
"""
data = {
'album_name': 'Discovery',
'artist': {
'artist_name': 'Daft Punk'
# Missing origin
}
}
expected_errors = {
'artist': [
{'artist_origin': ['This field is required.']}
]
}
serializer = self.AlbumSerializer(data=data)
self.assertEqual(serializer.is_valid(), False)
self.assertEqual(serializer.errors, expected_errors)