Initial work at implementing ReturnDict and ReturnList for nested serializers.

This commit is contained in:
Gordon Cassie 2014-11-24 08:41:12 -05:00
parent 5b671cb515
commit 32647eda1f
2 changed files with 22 additions and 3 deletions

View File

@ -363,6 +363,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)
@ -479,9 +481,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.