This commit is contained in:
Gordon Cassie 2014-11-27 14:14:57 +00:00
commit 81acbce5a4
2 changed files with 22 additions and 3 deletions

View File

@ -372,6 +372,8 @@ class Serializer(BaseSerializer):
attribute = field.get_attribute(instance) attribute = field.get_attribute(instance)
if attribute is None: if attribute is None:
value = None value = None
elif isinstance(field, Serializer):
value = field.__class__(attribute).data
else: else:
value = field.to_representation(attribute) value = field.to_representation(attribute)
transform_method = getattr(self, 'transform_' + field.field_name, None) transform_method = getattr(self, 'transform_' + field.field_name, None)
@ -488,9 +490,11 @@ class ListSerializer(BaseSerializer):
List of object instances -> List of dicts of primitive datatypes. List of object instances -> List of dicts of primitive datatypes.
""" """
iterable = data.all() if (hasattr(data, 'all')) else data iterable = data.all() if (hasattr(data, 'all')) else data
return [ if isinstance(self.child, Serializer):
self.child.to_representation(item) for item in iterable serializer = self.child.__class__
] return [serializer(item).data for item in iterable]
else:
return [self.child.to_representation(item) for item in iterable]
def update(self, instance, validated_data): def update(self, instance, validated_data):
raise NotImplementedError( raise NotImplementedError(

View File

@ -1,4 +1,5 @@
from rest_framework import serializers from rest_framework import serializers
from rest_framework.utils.serializer_helpers import ReturnDict
class TestNestedSerializer: class TestNestedSerializer:
@ -39,6 +40,20 @@ class TestNestedSerializer:
serializer = self.Serializer() serializer = self.Serializer()
assert serializer.data == expected_data assert serializer.data == expected_data
def test_nested_field_uses_return_dict(self):
input_data = {
'nested': {
'one': '1',
'two': '2',
}
}
serializer = self.Serializer(input_data)
assert isinstance(serializer.data['nested'], ReturnDict)
def test_empty_nested_field_uses_return_dict(self):
serializer = self.Serializer()
assert isinstance(serializer.data['nested'], ReturnDict)
# """ # """
# Tests to cover nested serializers. # Tests to cover nested serializers.