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)
if attribute is None:
value = None
elif isinstance(field, Serializer):
value = field.__class__(attribute).data
else:
value = field.to_representation(attribute)
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.
"""
iterable = data.all() if (hasattr(data, 'all')) else data
return [
self.child.to_representation(item) for item in iterable
]
if isinstance(self.child, Serializer):
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):
raise NotImplementedError(

View File

@ -1,4 +1,5 @@
from rest_framework import serializers
from rest_framework.utils.serializer_helpers import ReturnDict
class TestNestedSerializer:
@ -39,6 +40,20 @@ class TestNestedSerializer:
serializer = self.Serializer()
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.