Fixed #32620 -- Allowed subclasses of Big/SmallAutoField for DEFAULT_AUTO_FIELD.
This commit is contained in:
parent
30e123ed35
commit
45a58c31e6
|
@ -2524,7 +2524,7 @@ class AutoFieldMeta(type):
|
||||||
return isinstance(instance, self._subclasses) or super().__instancecheck__(instance)
|
return isinstance(instance, self._subclasses) or super().__instancecheck__(instance)
|
||||||
|
|
||||||
def __subclasscheck__(self, subclass):
|
def __subclasscheck__(self, subclass):
|
||||||
return subclass in self._subclasses or super().__subclasscheck__(subclass)
|
return issubclass(subclass, self._subclasses) or super().__subclasscheck__(subclass)
|
||||||
|
|
||||||
|
|
||||||
class AutoField(AutoFieldMixin, IntegerField, metaclass=AutoFieldMeta):
|
class AutoField(AutoFieldMixin, IntegerField, metaclass=AutoFieldMeta):
|
||||||
|
|
|
@ -10,3 +10,7 @@ Bugfixes
|
||||||
========
|
========
|
||||||
|
|
||||||
* Corrected detection of GDAL 3.2 on Windows (:ticket:`32544`).
|
* Corrected detection of GDAL 3.2 on Windows (:ticket:`32544`).
|
||||||
|
|
||||||
|
* Fixed a bug in Django 3.2 where subclasses of ``BigAutoField`` and
|
||||||
|
``SmallAutoField`` were not allowed for the :setting:`DEFAULT_AUTO_FIELD`
|
||||||
|
setting (:ticket:`32620`).
|
||||||
|
|
|
@ -30,6 +30,18 @@ class AutoFieldInheritanceTests(SimpleTestCase):
|
||||||
self.assertIsInstance(field(), models.AutoField)
|
self.assertIsInstance(field(), models.AutoField)
|
||||||
|
|
||||||
def test_issubclass_of_autofield(self):
|
def test_issubclass_of_autofield(self):
|
||||||
for field in (models.BigAutoField, models.SmallAutoField):
|
class MyBigAutoField(models.BigAutoField):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class MySmallAutoField(models.SmallAutoField):
|
||||||
|
pass
|
||||||
|
|
||||||
|
tests = [
|
||||||
|
MyBigAutoField,
|
||||||
|
MySmallAutoField,
|
||||||
|
models.BigAutoField,
|
||||||
|
models.SmallAutoField,
|
||||||
|
]
|
||||||
|
for field in tests:
|
||||||
with self.subTest(field.__name__):
|
with self.subTest(field.__name__):
|
||||||
self.assertTrue(issubclass(field, models.AutoField))
|
self.assertTrue(issubclass(field, models.AutoField))
|
||||||
|
|
|
@ -4,6 +4,10 @@ from django.test import SimpleTestCase, override_settings
|
||||||
from django.test.utils import isolate_apps
|
from django.test.utils import isolate_apps
|
||||||
|
|
||||||
|
|
||||||
|
class MyBigAutoField(models.BigAutoField):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@isolate_apps('model_options')
|
@isolate_apps('model_options')
|
||||||
class TestDefaultPK(SimpleTestCase):
|
class TestDefaultPK(SimpleTestCase):
|
||||||
@override_settings(DEFAULT_AUTO_FIELD='django.db.models.NonexistentAutoField')
|
@override_settings(DEFAULT_AUTO_FIELD='django.db.models.NonexistentAutoField')
|
||||||
|
@ -74,6 +78,15 @@ class TestDefaultPK(SimpleTestCase):
|
||||||
|
|
||||||
self.assertIsInstance(Model._meta.pk, models.SmallAutoField)
|
self.assertIsInstance(Model._meta.pk, models.SmallAutoField)
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
DEFAULT_AUTO_FIELD='model_options.test_default_pk.MyBigAutoField'
|
||||||
|
)
|
||||||
|
def test_default_auto_field_setting_bigautofield_subclass(self):
|
||||||
|
class Model(models.Model):
|
||||||
|
pass
|
||||||
|
|
||||||
|
self.assertIsInstance(Model._meta.pk, MyBigAutoField)
|
||||||
|
|
||||||
@isolate_apps('model_options.apps.ModelPKConfig')
|
@isolate_apps('model_options.apps.ModelPKConfig')
|
||||||
@override_settings(DEFAULT_AUTO_FIELD='django.db.models.AutoField')
|
@override_settings(DEFAULT_AUTO_FIELD='django.db.models.AutoField')
|
||||||
def test_app_default_auto_field(self):
|
def test_app_default_auto_field(self):
|
||||||
|
|
Loading…
Reference in New Issue