1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #36564 -- Changed DEFAULT_AUTO_FIELD from AutoField to BigAutoField.

This commit is contained in:
Tim Graham
2025-08-19 15:08:43 -04:00
committed by Jacob Walls
parent 0ddbe12ea9
commit 2a636118da
26 changed files with 114 additions and 252 deletions

View File

@@ -1,5 +1,3 @@
from unittest import mock
from django.core import checks
from django.core.checks import Error, Warning
from django.db import models
@@ -411,136 +409,3 @@ class ConstraintNameTests(TestCase):
constraints = [constraint]
self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [])
def mocked_is_overridden(self, setting):
# Force treating DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' as a not
# overridden setting.
return (
setting != "DEFAULT_AUTO_FIELD"
or self.DEFAULT_AUTO_FIELD != "django.db.models.AutoField"
)
@mock.patch("django.conf.UserSettingsHolder.is_overridden", mocked_is_overridden)
@override_settings(DEFAULT_AUTO_FIELD="django.db.models.AutoField")
@isolate_apps("check_framework.apps.CheckDefaultPKConfig", attr_name="apps")
@override_system_checks([checks.model_checks.check_all_models])
class ModelDefaultAutoFieldTests(SimpleTestCase):
msg = (
"Auto-created primary key used when not defining a primary key type, "
"by default 'django.db.models.AutoField'."
)
hint = (
"Configure the DEFAULT_AUTO_FIELD setting or the "
"CheckDefaultPKConfig.default_auto_field attribute to point to a "
"subclass of AutoField, e.g. 'django.db.models.BigAutoField'."
)
def test_auto_created_pk(self):
class Model(models.Model):
pass
self.assertEqual(
checks.run_checks(app_configs=self.apps.get_app_configs()),
[
Warning(self.msg, hint=self.hint, obj=Model, id="models.W042"),
],
)
def test_explicit_inherited_pk(self):
class Parent(models.Model):
id = models.AutoField(primary_key=True)
class Child(Parent):
pass
self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [])
def test_skipped_on_model_with_invalid_app_label(self):
class Model(models.Model):
class Meta:
app_label = "invalid_app_label"
self.assertEqual(Model.check(), [])
def test_skipped_on_abstract_model(self):
class Abstract(models.Model):
class Meta:
abstract = True
# Call .check() because abstract models are not registered.
self.assertEqual(Abstract.check(), [])
def test_explicit_inherited_parent_link(self):
class Parent(models.Model):
id = models.AutoField(primary_key=True)
class Child(Parent):
parent_ptr = models.OneToOneField(Parent, models.CASCADE, parent_link=True)
self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [])
def test_auto_created_inherited_pk(self):
class Parent(models.Model):
pass
class Child(Parent):
pass
self.assertEqual(
checks.run_checks(app_configs=self.apps.get_app_configs()),
[
Warning(self.msg, hint=self.hint, obj=Parent, id="models.W042"),
],
)
def test_auto_created_inherited_parent_link(self):
class Parent(models.Model):
pass
class Child(Parent):
parent_ptr = models.OneToOneField(Parent, models.CASCADE, parent_link=True)
self.assertEqual(
checks.run_checks(app_configs=self.apps.get_app_configs()),
[
Warning(self.msg, hint=self.hint, obj=Parent, id="models.W042"),
],
)
def test_auto_created_pk_inherited_abstract_parent(self):
class Parent(models.Model):
class Meta:
abstract = True
class Child(Parent):
pass
self.assertEqual(
checks.run_checks(app_configs=self.apps.get_app_configs()),
[
Warning(self.msg, hint=self.hint, obj=Child, id="models.W042"),
],
)
@override_settings(DEFAULT_AUTO_FIELD="django.db.models.BigAutoField")
def test_default_auto_field_setting(self):
class Model(models.Model):
pass
self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [])
def test_explicit_pk(self):
class Model(models.Model):
id = models.BigAutoField(primary_key=True)
self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [])
@isolate_apps("check_framework.apps.CheckPKConfig", kwarg_name="apps")
def test_app_default_auto_field(self, apps):
class ModelWithPkViaAppConfig(models.Model):
class Meta:
app_label = "check_framework.apps.CheckPKConfig"
self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [])