1
0
mirror of https://github.com/django/django.git synced 2024-12-23 01:25:58 +00:00

Refs #22997 -- Prevented requesting a default value for ID field.

This commit is contained in:
Ben Cail 2024-10-02 17:05:33 -04:00
parent 6765b6adf9
commit 216aed26f5
2 changed files with 24 additions and 0 deletions

View File

@ -1131,6 +1131,7 @@ class MigrationAutodetector:
# You can't just add NOT NULL fields with no default or fields # You can't just add NOT NULL fields with no default or fields
# which don't allow empty strings as default. # which don't allow empty strings as default.
time_fields = (models.DateField, models.DateTimeField, models.TimeField) time_fields = (models.DateField, models.DateTimeField, models.TimeField)
auto_fields = (models.AutoField, models.SmallAutoField, models.BigAutoField)
preserve_default = ( preserve_default = (
field.null field.null
or field.has_default() or field.has_default()
@ -1138,6 +1139,7 @@ class MigrationAutodetector:
or field.many_to_many or field.many_to_many
or (field.blank and field.empty_strings_allowed) or (field.blank and field.empty_strings_allowed)
or (isinstance(field, time_fields) and field.auto_now) or (isinstance(field, time_fields) and field.auto_now)
or (isinstance(field, auto_fields))
) )
if not preserve_default: if not preserve_default:
field = field.clone() field = field.clone()

View File

@ -1595,6 +1595,28 @@ class AutodetectorTests(BaseAutodetectorTests):
changes, "testapp", 0, 0, db_default="Ada Lovelace" changes, "testapp", 0, 0, db_default="Ada Lovelace"
) )
@mock.patch(
"django.db.migrations.questioner.MigrationQuestioner.ask_not_null_addition",
side_effect=AssertionError("Should not have prompted for not null addition"),
)
def test_remove_primary_key_attribute(self, mocked_ask_method):
initial_state = ModelState(
"testapp",
"Author",
[
("pkfield", models.IntegerField(primary_key=True)),
],
)
updated_state = ModelState(
"testapp",
"Author",
[
("id", models.AutoField(primary_key=True)),
("pkfield", models.IntegerField(primary_key=False)),
],
)
changes = self.get_changes([initial_state], [updated_state])
@mock.patch( @mock.patch(
"django.db.migrations.questioner.MigrationQuestioner.ask_not_null_alteration", "django.db.migrations.questioner.MigrationQuestioner.ask_not_null_alteration",
return_value=models.NOT_PROVIDED, return_value=models.NOT_PROVIDED,