Remove deprecated default fields only from the global

And keep user defined values
This commit is contained in:
Nicolas Delaby 2022-01-24 18:05:04 +01:00
parent bb2523ddb9
commit 45a4557efe
3 changed files with 14 additions and 4 deletions

View file

@ -31,7 +31,6 @@ class ConfigurationBase(type):
if parents:
for base in bases[::-1]:
settings_vars.update(uppercase_attributes(base))
attrs = dict(settings_vars, **attrs)
deprecated_settings = {
# DEFAULT_HASHING_ALGORITHM is always deprecated, as it's a
@ -51,11 +50,12 @@ class ConfigurationBase(type):
# PASSWORD_RESET_TIMEOUT_DAYS is deprecated in favor of
# PASSWORD_RESET_TIMEOUT in Django 3.1
# https://github.com/django/django/commit/226ebb17290b604ef29e82fb5c1fbac3594ac163#diff-ec2bed07bb264cb95a80f08d71a47c06R163-R170
if "PASSWORD_RESET_TIMEOUT" in attrs:
if "PASSWORD_RESET_TIMEOUT" in settings_vars:
deprecated_settings.add("PASSWORD_RESET_TIMEOUT_DAYS")
for deprecated_setting in deprecated_settings:
if deprecated_setting in attrs:
del attrs[deprecated_setting]
if deprecated_setting in settings_vars:
del settings_vars[deprecated_setting]
attrs = {**settings_vars, **attrs}
return super().__new__(cls, name, bases, attrs)

View file

@ -71,3 +71,7 @@ class Test(Configuration):
@classmethod
def post_setup(cls):
cls.POST_SETUP_TEST_SETTING = 7
class TestWithDefaultSetExplicitely(Test):
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

View file

@ -55,6 +55,12 @@ class MainTests(TestCase):
self.assertEqual(repr(Configuration),
"<Configuration 'configurations.base.Configuration'>")
def test_deprecated_settings_but_set_by_user(self):
from tests.settings.main import TestWithDefaultSetExplicitely
TestWithDefaultSetExplicitely.setup()
self.assertEqual(TestWithDefaultSetExplicitely.DEFAULT_AUTO_FIELD,
"django.db.models.BigAutoField")
def test_repr(self):
from tests.settings.main import Test
self.assertEqual(repr(Test),