Skip to content

Commit

Permalink
Revert "Alter read_only+default behaviour (encode#5886)"
Browse files Browse the repository at this point in the history
This reverts commit c2b24f8.
  • Loading branch information
fraclogchase committed Nov 21, 2018
1 parent 9b7db8d commit aff2c35
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 10 deletions.
1 change: 1 addition & 0 deletions docs/api-guide/validators.md
Expand Up @@ -189,6 +189,7 @@ A default class that can be used to *only set a default argument during create o
It takes a single argument, which is the default value or callable that should be used during create operations.

created_at = serializers.DateTimeField(
read_only=True,
default=serializers.CreateOnlyDefault(timezone.now)
)

Expand Down
3 changes: 2 additions & 1 deletion rest_framework/serializers.py
Expand Up @@ -367,7 +367,8 @@ def fields(self):
@cached_property
def _writable_fields(self):
return [
field for field in self.fields.values() if not field.read_only
field for field in self.fields.values()
if (not field.read_only) or (field.default is not empty)
]

@cached_property
Expand Down
9 changes: 1 addition & 8 deletions tests/test_fields.py
Expand Up @@ -217,17 +217,10 @@ def example_callable(self):
class TestReadOnly:
def setup(self):
class TestSerializer(serializers.Serializer):
read_only = serializers.ReadOnlyField(default="789")
read_only = serializers.ReadOnlyField()
writable = serializers.IntegerField()
self.Serializer = TestSerializer

def test_writable_fields(self):
"""
Read-only fields should not be writable, even with default ()
"""
serializer = self.Serializer()
assert len(serializer._writable_fields) == 1

def test_validate_read_only(self):
"""
Read-only serializers.should not be included in validation.
Expand Down
2 changes: 1 addition & 1 deletion tests/test_serializer.py
Expand Up @@ -509,7 +509,7 @@ class ExampleSerializer(serializers.Serializer):
class TestDefaultInclusions:
def setup(self):
class ExampleSerializer(serializers.Serializer):
char = serializers.CharField(default='abc')
char = serializers.CharField(read_only=True, default='abc')
integer = serializers.IntegerField()
self.Serializer = ExampleSerializer

Expand Down

0 comments on commit aff2c35

Please sign in to comment.