diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 43fed9aee..ab8f2eb44 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -442,6 +442,8 @@ class Field(object): except (KeyError, AttributeError) as exc: if self.default is not empty: return self.get_default() + if self.allow_null: + return None if not self.required: raise SkipField() msg = ( diff --git a/tests/test_serializer.py b/tests/test_serializer.py index bb78af63a..df8839356 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -449,6 +449,14 @@ class TestDefaultOutput: assert Serializer({'nested': {'a': '3', 'b': {}}}).data == {'nested': {'a': '3', 'c': '2'}} assert Serializer({'nested': {'a': '3', 'b': {'c': '4'}}}).data == {'nested': {'a': '3', 'c': '4'}} + def test_default_for_allow_null(self): + # allow_null=True should imply default=None + class Serializer(serializers.Serializer): + foo = serializers.CharField() + bar = serializers.CharField(source='foo.bar', allow_null=True) + + assert Serializer({'foo': None}).data == {'foo': None, 'bar': None} + class TestCacheSerializerData: def test_cache_serializer_data(self):