not required read_only Fields with allow_null True

Since #5639 we are unable to render fields that were rendered previously
with `allow_null=True`.
Backward compatibility is not preserved,
because `required=True` and `read_only=True` are conflicting, so in our
case, some fields just disappeared and it seems there is not way to get
them back.

I'm not sure about the fix, but the regression test is probably right.
This commit is contained in:
Nicolas Delaby 2017-12-23 22:09:35 +01:00
parent 5fc35eb7eb
commit 4c6b3c64ac
2 changed files with 8 additions and 0 deletions

View File

@ -442,6 +442,8 @@ class Field(object):
except (KeyError, AttributeError) as exc:
if self.default is not empty:
return self.get_default()
if self.read_only and self.allow_null:
return None
if not self.required:
raise SkipField()
if self.allow_null:

View File

@ -384,10 +384,16 @@ class TestNotRequiredOutput:
def test_not_required_output_for_allow_null_field(self):
class ExampleSerializer(serializers.Serializer):
omitted = serializers.CharField(required=False, allow_null=True)
ommited_read_only = serializers.CharField(
required=False,
read_only=True,
allow_null=True
)
included = serializers.CharField()
serializer = ExampleSerializer({'included': 'abc'})
assert 'omitted' not in serializer.data
assert serializer.data['ommited_read_only'] is None
class TestDefaultOutput: