1
0
mirror of https://github.com/django/django.git synced 2025-03-06 07:22:32 +00:00

[5.2.x] Refs #22997 -- Prevented requesting a default value for auto fields.

Backport of db7b1ae9f6d9e26facbb3da4cf5f5a513704bfe5 from main.
This commit is contained in:
Ben Cail 2024-10-02 17:05:33 -04:00 committed by Sarah Boyce
parent 2b11b8e989
commit d57bf4618c
2 changed files with 30 additions and 0 deletions

View File

@ -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()

View File

@ -1595,6 +1595,34 @@ class AutodetectorTests(BaseAutodetectorTests):
changes, "testapp", 0, 0, db_default="Ada Lovelace"
)
@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,