Skip to content

Commit ccd9b71

Browse files
bluetechtomchristie
authored andcommitted
Don't cache _readable_fields and _writable_fields (#6689)
It might be useful for a serializer with many many fields which uses read_only and write_only on a large percentage of the fields. But the memory usage and statefulness it adds are not worth it for the common case.
1 parent 1b8141a commit ccd9b71

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

rest_framework/serializers.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -361,18 +361,17 @@ def fields(self):
361361
fields[key] = value
362362
return fields
363363

364-
@cached_property
364+
@property
365365
def _writable_fields(self):
366-
return [
367-
field for field in self.fields.values() if not field.read_only
368-
]
366+
for field in self.fields.values():
367+
if not field.read_only:
368+
yield field
369369

370-
@cached_property
370+
@property
371371
def _readable_fields(self):
372-
return [
373-
field for field in self.fields.values()
374-
if not field.write_only
375-
]
372+
for field in self.fields.values():
373+
if not field.write_only:
374+
yield field
376375

377376
def get_fields(self):
378377
"""

tests/test_fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def test_writable_fields(self):
219219
Read-only fields should not be writable, even with default ()
220220
"""
221221
serializer = self.Serializer()
222-
assert len(serializer._writable_fields) == 1
222+
assert len(list(serializer._writable_fields)) == 1
223223

224224
def test_validate_read_only(self):
225225
"""

0 commit comments

Comments
 (0)