summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Cail <bcail@crossway.org>2024-10-02 17:05:33 -0400
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-02-06 13:53:43 +0100
commitdb7b1ae9f6d9e26facbb3da4cf5f5a513704bfe5 (patch)
treee4885dbe69bc89f0af5087ed35494a2f3bc6e663
parent1f33f21fca60c3839bcfc756900fb78bcfd15cc3 (diff)
Refs #22997 -- Prevented requesting a default value for auto fields.
-rw-r--r--django/db/migrations/autodetector.py2
-rw-r--r--tests/migrations/test_autodetector.py28
2 files changed, 30 insertions, 0 deletions
diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py
index 3475823003..934dab20f0 100644
--- a/django/db/migrations/autodetector.py
+++ b/django/db/migrations/autodetector.py
@@ -1132,6 +1132,7 @@ class MigrationAutodetector:
# You can't just add NOT NULL fields with no default or fields
# which don't allow empty strings as default.
time_fields = (models.DateField, models.DateTimeField, models.TimeField)
+ auto_fields = (models.AutoField, models.SmallAutoField, models.BigAutoField)
preserve_default = (
field.null
or field.has_default()
@@ -1139,6 +1140,7 @@ class MigrationAutodetector:
or field.many_to_many
or (field.blank and field.empty_strings_allowed)
or (isinstance(field, time_fields) and field.auto_now)
+ or (isinstance(field, auto_fields))
)
if not preserve_default:
field = field.clone()
diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py
index 33196ea6f4..ac725d317e 100644
--- a/tests/migrations/test_autodetector.py
+++ b/tests/migrations/test_autodetector.py
@@ -1596,6 +1596,34 @@ class AutodetectorTests(BaseAutodetectorTests):
)
@mock.patch(
+ "django.db.migrations.questioner.MigrationQuestioner.ask_not_null_addition"
+ )
+ def test_add_auto_field_does_not_request_default(self, mocked_ask_method):
+ initial_state = ModelState(
+ "testapp",
+ "Author",
+ [
+ ("pkfield", models.IntegerField(primary_key=True)),
+ ],
+ )
+ for auto_field in [
+ models.AutoField,
+ models.BigAutoField,
+ models.SmallAutoField,
+ ]:
+ with self.subTest(auto_field=auto_field):
+ updated_state = ModelState(
+ "testapp",
+ "Author",
+ [
+ ("id", auto_field(primary_key=True)),
+ ("pkfield", models.IntegerField(primary_key=False)),
+ ],
+ )
+ self.get_changes([initial_state], [updated_state])
+ mocked_ask_method.assert_not_called()
+
+ @mock.patch(
"django.db.migrations.questioner.MigrationQuestioner.ask_not_null_alteration",
return_value=models.NOT_PROVIDED,
)