diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 7b7959db9..b23389c56 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -361,18 +361,17 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass): fields[key] = value 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 e7f16c178..468b33e57 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): """