diff options
| author | Adam Johnson <me@adamj.eu> | 2024-04-29 16:06:39 +0100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-05-07 14:25:51 +0200 |
| commit | 7abe5112f4cb50c15b79a2afd4c1b68f0767b243 (patch) | |
| tree | 553809a2bff3c753b72288262a55d09fd8f883c9 /django | |
| parent | ceea86baa36b91d0002911770340a2d7bd4f64b7 (diff) | |
Fixed #35407 -- Cached model's Options.swapped.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/options.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/django/db/models/options.py b/django/db/models/options.py index ed7be7dd7a..68a7228cbe 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -5,6 +5,7 @@ from collections import defaultdict from django.apps import apps from django.conf import settings from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured +from django.core.signals import setting_changed from django.db import connections from django.db.models import AutoField, Manager, OrderWrt, UniqueConstraint from django.db.models.query_utils import PathInfo @@ -230,6 +231,9 @@ class Options: self.db_table, connection.ops.max_name_length() ) + if self.swappable: + setting_changed.connect(self.setting_changed) + def _format_names(self, objs): """App label/class name interpolation for object names.""" names = {"app_label": self.app_label.lower(), "class": self.model_name} @@ -399,7 +403,7 @@ class Options: with override(None): return str(self.verbose_name) - @property + @cached_property def swapped(self): """ Has this model been swapped out for another? If so, return the model @@ -427,6 +431,10 @@ class Options: return swapped_for return None + def setting_changed(self, *, setting, **kwargs): + if setting == self.swappable and "swapped" in self.__dict__: + del self.swapped + @cached_property def managers(self): managers = [] |
