diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 43d339da0..bf978510b 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -446,7 +446,7 @@ class BaseSerializer(WritableField): if not self._errors: into.update(reverted_data) else: - if value in (None, ''): + if value in (None, '') and not self.many: into[(self.source or field_name)] = None else: # Set the serializer object if it exists diff --git a/rest_framework/tests/test_relations_nested.py b/rest_framework/tests/test_relations_nested.py index 4d9da4896..ccc4b96a3 100644 --- a/rest_framework/tests/test_relations_nested.py +++ b/rest_framework/tests/test_relations_nested.py @@ -283,6 +283,13 @@ class ReverseNestedOneToManyTests(TestCase): self.assertFalse(serializer.is_valid()) self.assertEqual(serializer.errors, {'sources': [{}, {}, {}, {'name': ['This field is required.']}]}) + def test_one_to_many_create_with_empty_string(self): + data = {'id': 1, 'name': 'target-1', 'sources': ''} + instance = OneToManyTarget.objects.get(pk=1) + serializer = self.Serializer(instance, data=data) + self.assertFalse(serializer.is_valid()) + self.assertEqual(serializer.errors, {'sources': [{'non_field_errors': ['Expected a list of items.']}]}) + def test_one_to_many_update(self): data = {'id': 1, 'name': 'target-1-updated', 'sources': [{'id': 1, 'name': 'source-1-updated'}, {'id': 2, 'name': 'source-2'},