diff options
| author | Ben Cail <bcail@crossway.org> | 2024-10-02 17:05:33 -0400 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-02-06 13:53:43 +0100 |
| commit | db7b1ae9f6d9e26facbb3da4cf5f5a513704bfe5 (patch) | |
| tree | e4885dbe69bc89f0af5087ed35494a2f3bc6e663 | |
| parent | 1f33f21fca60c3839bcfc756900fb78bcfd15cc3 (diff) | |
Refs #22997 -- Prevented requesting a default value for auto fields.
| -rw-r--r-- | django/db/migrations/autodetector.py | 2 | ||||
| -rw-r--r-- | tests/migrations/test_autodetector.py | 28 |
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, ) |
