mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 21:10:13 +03:00
Merge 32647eda1f
into b73cc71666
This commit is contained in:
commit
81acbce5a4
|
@ -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(
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user