mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #24590 -- Cached calls to swappable_setting.
Moved the lookup in Field.swappable_setting to Apps, and added an lru_cache to cache the results. Refs #24743 Thanks Marten Kenbeek for the initial work on the patch. Thanks Aymeric Augustin and Tim Graham for the review.
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import apps
|
||||
from django.db import models
|
||||
from django.test import SimpleTestCase, override_settings
|
||||
from django.test.utils import isolate_lru_cache
|
||||
from django.utils import six
|
||||
|
||||
|
||||
@@ -219,14 +221,15 @@ class FieldDeconstructionTests(SimpleTestCase):
|
||||
|
||||
@override_settings(AUTH_USER_MODEL="auth.Permission")
|
||||
def test_foreign_key_swapped(self):
|
||||
# It doesn't matter that we swapped out user for permission;
|
||||
# there's no validation. We just want to check the setting stuff works.
|
||||
field = models.ForeignKey("auth.Permission", models.CASCADE)
|
||||
name, path, args, kwargs = field.deconstruct()
|
||||
self.assertEqual(path, "django.db.models.ForeignKey")
|
||||
self.assertEqual(args, [])
|
||||
self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
|
||||
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
|
||||
with isolate_lru_cache(apps.get_swappable_settings_name):
|
||||
# It doesn't matter that we swapped out user for permission;
|
||||
# there's no validation. We just want to check the setting stuff works.
|
||||
field = models.ForeignKey("auth.Permission", models.CASCADE)
|
||||
name, path, args, kwargs = field.deconstruct()
|
||||
self.assertEqual(path, "django.db.models.ForeignKey")
|
||||
self.assertEqual(args, [])
|
||||
self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
|
||||
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
|
||||
|
||||
def test_image_field(self):
|
||||
field = models.ImageField(upload_to="foo/barness", width_field="width", height_field="height")
|
||||
@@ -297,14 +300,15 @@ class FieldDeconstructionTests(SimpleTestCase):
|
||||
|
||||
@override_settings(AUTH_USER_MODEL="auth.Permission")
|
||||
def test_many_to_many_field_swapped(self):
|
||||
# It doesn't matter that we swapped out user for permission;
|
||||
# there's no validation. We just want to check the setting stuff works.
|
||||
field = models.ManyToManyField("auth.Permission")
|
||||
name, path, args, kwargs = field.deconstruct()
|
||||
self.assertEqual(path, "django.db.models.ManyToManyField")
|
||||
self.assertEqual(args, [])
|
||||
self.assertEqual(kwargs, {"to": "auth.Permission"})
|
||||
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
|
||||
with isolate_lru_cache(apps.get_swappable_settings_name):
|
||||
# It doesn't matter that we swapped out user for permission;
|
||||
# there's no validation. We just want to check the setting stuff works.
|
||||
field = models.ManyToManyField("auth.Permission")
|
||||
name, path, args, kwargs = field.deconstruct()
|
||||
self.assertEqual(path, "django.db.models.ManyToManyField")
|
||||
self.assertEqual(args, [])
|
||||
self.assertEqual(kwargs, {"to": "auth.Permission"})
|
||||
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
|
||||
|
||||
def test_null_boolean_field(self):
|
||||
field = models.NullBooleanField()
|
||||
|
||||
Reference in New Issue
Block a user