diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 6353c71bd..107115a2f 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -361,18 +361,17 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass): field.bind(field_name=field_name, parent=self) return fields - @cached_property + @property def _writable_fields(self): - return [ - field for field in self.fields.values() if not field.read_only - ] + for field in self.fields.values(): + if not field.read_only: + yield field - @cached_property + @property def _readable_fields(self): - return [ - field for field in self.fields.values() - if not field.write_only - ] + for field in self.fields.values(): + if not field.write_only: + yield field def get_fields(self): """ diff --git a/tests/test_fields.py b/tests/test_fields.py index 41d08bd5e..6a6d88d03 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -219,7 +219,7 @@ class TestReadOnly: Read-only fields should not be writable, even with default () """ serializer = self.Serializer() - assert len(serializer._writable_fields) == 1 + assert len(list(serializer._writable_fields)) == 1 def test_validate_read_only(self): """