Skip to content

Commit aff2c35

Browse files
committed
Revert "Alter read_only+default behaviour (encode#5886)"
This reverts commit c2b24f8.
1 parent 9b7db8d commit aff2c35

File tree

4 files changed

+5
-10
lines changed

4 files changed

+5
-10
lines changed

docs/api-guide/validators.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ A default class that can be used to *only set a default argument during create o
189189
It takes a single argument, which is the default value or callable that should be used during create operations.
190190

191191
created_at = serializers.DateTimeField(
192+
read_only=True,
192193
default=serializers.CreateOnlyDefault(timezone.now)
193194
)
194195

rest_framework/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,8 @@ def fields(self):
367367
@cached_property
368368
def _writable_fields(self):
369369
return [
370-
field for field in self.fields.values() if not field.read_only
370+
field for field in self.fields.values()
371+
if (not field.read_only) or (field.default is not empty)
371372
]
372373

373374
@cached_property

tests/test_fields.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -217,17 +217,10 @@ def example_callable(self):
217217
class TestReadOnly:
218218
def setup(self):
219219
class TestSerializer(serializers.Serializer):
220-
read_only = serializers.ReadOnlyField(default="789")
220+
read_only = serializers.ReadOnlyField()
221221
writable = serializers.IntegerField()
222222
self.Serializer = TestSerializer
223223

224-
def test_writable_fields(self):
225-
"""
226-
Read-only fields should not be writable, even with default ()
227-
"""
228-
serializer = self.Serializer()
229-
assert len(serializer._writable_fields) == 1
230-
231224
def test_validate_read_only(self):
232225
"""
233226
Read-only serializers.should not be included in validation.

tests/test_serializer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ class ExampleSerializer(serializers.Serializer):
509509
class TestDefaultInclusions:
510510
def setup(self):
511511
class ExampleSerializer(serializers.Serializer):
512-
char = serializers.CharField(default='abc')
512+
char = serializers.CharField(read_only=True, default='abc')
513513
integer = serializers.IntegerField()
514514
self.Serializer = ExampleSerializer
515515

0 commit comments

Comments
 (0)