mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-24 00:04:16 +03:00
Fix expansion of writable nested serializers where the inner fields have source set.
This commit is contained in:
parent
69fef838cc
commit
4a134eefa2
|
@ -422,7 +422,9 @@ class BaseSerializer(WritableField):
|
||||||
|
|
||||||
if self.source == '*':
|
if self.source == '*':
|
||||||
if value:
|
if value:
|
||||||
into.update(value)
|
reverted_data = self.restore_fields(value, {})
|
||||||
|
if not self._errors:
|
||||||
|
into.update(reverted_data)
|
||||||
else:
|
else:
|
||||||
if value in (None, ''):
|
if value in (None, ''):
|
||||||
into[(self.source or field_name)] = None
|
into[(self.source or field_name)] = None
|
||||||
|
|
|
@ -105,6 +105,17 @@ class ModelSerializerWithNestedSerializer(serializers.ModelSerializer):
|
||||||
model = Person
|
model = Person
|
||||||
|
|
||||||
|
|
||||||
|
class NestedSerializerWithRenamedField(serializers.Serializer):
|
||||||
|
renamed_info = serializers.Field(source='info')
|
||||||
|
|
||||||
|
|
||||||
|
class ModelSerializerWithNestedSerializerWithRenamedField(serializers.ModelSerializer):
|
||||||
|
nested = NestedSerializerWithRenamedField(source='*')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Person
|
||||||
|
|
||||||
|
|
||||||
class PersonSerializerInvalidReadOnly(serializers.ModelSerializer):
|
class PersonSerializerInvalidReadOnly(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
Testing for #652.
|
Testing for #652.
|
||||||
|
@ -456,6 +467,20 @@ class ValidationTests(TestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(serializer.is_valid(), True)
|
self.assertEqual(serializer.is_valid(), True)
|
||||||
|
|
||||||
|
def test_writable_star_source_with_inner_source_fields(self):
|
||||||
|
"""
|
||||||
|
Tests that a serializer with source="*" correctly expands the
|
||||||
|
it's fields into the outer serializer even if they have their
|
||||||
|
own 'source' parameters.
|
||||||
|
"""
|
||||||
|
|
||||||
|
serializer = ModelSerializerWithNestedSerializerWithRenamedField(data={
|
||||||
|
'name': 'marko',
|
||||||
|
'nested': {'renamed_info': 'hi'}},
|
||||||
|
)
|
||||||
|
self.assertEqual(serializer.is_valid(), True)
|
||||||
|
self.assertEqual(serializer.errors, {})
|
||||||
|
|
||||||
|
|
||||||
class CustomValidationTests(TestCase):
|
class CustomValidationTests(TestCase):
|
||||||
class CommentSerializerWithFieldValidator(CommentSerializer):
|
class CommentSerializerWithFieldValidator(CommentSerializer):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user