From db81a1735e2b57a8581e8699819218ab173a1d8b Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 9 May 2019 09:06:16 +0300 Subject: [PATCH] Simplify Serializer.fields with @cached_property --- rest_framework/serializers.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 742fa6577..7b7959db9 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -348,7 +348,7 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass): 'invalid': _('Invalid data. Expected a dictionary, but got {datatype}.') } - @property + @cached_property def fields(self): """ A dictionary of {field_name: field_instance}. @@ -356,11 +356,10 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass): # `fields` is evaluated lazily. We do this to ensure that we don't # have issues importing modules that use ModelSerializers as fields, # even if Django's app-loading stage has not yet run. - if not hasattr(self, '_fields'): - self._fields = BindingDict(self) - for key, value in self.get_fields().items(): - self._fields[key] = value - return self._fields + fields = BindingDict(self) + for key, value in self.get_fields().items(): + fields[key] = value + return fields @cached_property def _writable_fields(self):