From 35c2474f168fd10ac50886024d5879de81be5bd3 Mon Sep 17 00:00:00 2001 From: Collin Anderson Date: Wed, 16 Feb 2022 14:30:04 -0500 Subject: [PATCH] Made Field.error_messages a cached property. This speeds up field creation and reduces memory usage. --- django/db/models/fields/__init__.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 0afc2a0c92..4d17c25f0f 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -217,12 +217,7 @@ class Field(RegisterLookupMixin): self._validators = list(validators) # Store for deconstruction later - messages = {} - for c in reversed(self.__class__.__mro__): - messages.update(getattr(c, "default_error_messages", {})) - messages.update(error_messages or {}) self._error_messages = error_messages # Store for deconstruction later - self.error_messages = messages def __str__(self): """ @@ -669,6 +664,14 @@ class Field(RegisterLookupMixin): """ return value + @cached_property + def error_messages(self): + messages = {} + for c in reversed(self.__class__.__mro__): + messages.update(getattr(c, "default_error_messages", {})) + messages.update(self._error_messages or {}) + return messages + @cached_property def validators(self): """