Fixed #33953 -- Reverted "Fixed #33201 -- Made RenameModel operation a noop for models with db_table."

Regression in afeafd6036.
This reverts afeafd6036.

Thanks Timothy Thomas for the report.
This commit is contained in:
Iuri de Silvio 2022-08-24 10:10:56 -03:00 committed by Mariusz Felisiak
parent 71902e0d9f
commit 166a3b3263
3 changed files with 20 additions and 22 deletions

View File

@ -371,13 +371,12 @@ class RenameModel(ModelOperation):
new_model = to_state.apps.get_model(app_label, self.new_name) new_model = to_state.apps.get_model(app_label, self.new_name)
if self.allow_migrate_model(schema_editor.connection.alias, new_model): if self.allow_migrate_model(schema_editor.connection.alias, new_model):
old_model = from_state.apps.get_model(app_label, self.old_name) old_model = from_state.apps.get_model(app_label, self.old_name)
old_db_table = old_model._meta.db_table
new_db_table = new_model._meta.db_table
# Don't alter when a table name is not changed.
if old_db_table == new_db_table:
return
# Move the main table # Move the main table
schema_editor.alter_db_table(new_model, old_db_table, new_db_table) schema_editor.alter_db_table(
new_model,
old_model._meta.db_table,
new_model._meta.db_table,
)
# Alter the fields pointing to us # Alter the fields pointing to us
for related_object in old_model._meta.related_objects: for related_object in old_model._meta.related_objects:
if related_object.related_model == old_model: if related_object.related_model == old_model:

View File

@ -46,3 +46,6 @@ Bugfixes
* Fixed a migration crash on ``ManyToManyField`` fields with ``through`` * Fixed a migration crash on ``ManyToManyField`` fields with ``through``
referencing models in different apps (:ticket:`33938`). referencing models in different apps (:ticket:`33938`).
* Fixed a regression in Django 4.1 that caused an incorrect migration when
renaming a model with ``ManyToManyField`` and ``db_table`` (:ticket:`33953`).

View File

@ -1058,8 +1058,8 @@ class OperationTests(OperationTestBase):
Pony._meta.get_field("riders").remote_field.through.objects.count(), 2 Pony._meta.get_field("riders").remote_field.through.objects.count(), 2
) )
def test_rename_model_with_db_table_noop(self): def test_rename_model_with_db_table_rename_m2m(self):
app_label = "test_rmwdbtn" app_label = "test_rmwdbrm2m"
project_state = self.apply_operations( project_state = self.apply_operations(
app_label, app_label,
ProjectState(), ProjectState(),
@ -1069,32 +1069,28 @@ class OperationTests(OperationTestBase):
fields=[ fields=[
("id", models.AutoField(primary_key=True)), ("id", models.AutoField(primary_key=True)),
], ],
options={"db_table": "rider"},
), ),
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[ fields=[
("id", models.AutoField(primary_key=True)), ("id", models.AutoField(primary_key=True)),
( ("riders", models.ManyToManyField("Rider")),
"rider",
models.ForeignKey("%s.Rider" % app_label, models.CASCADE),
),
], ],
options={"db_table": "pony"},
), ),
], ],
) )
new_state = project_state.clone() new_state = project_state.clone()
operation = migrations.RenameModel("Rider", "Runner") operation = migrations.RenameModel("Pony", "PinkPony")
operation.state_forwards(app_label, new_state) operation.state_forwards(app_label, new_state)
with connection.schema_editor() as editor:
operation.database_forwards(app_label, editor, project_state, new_state)
with connection.schema_editor() as editor: Pony = new_state.apps.get_model(app_label, "PinkPony")
with self.assertNumQueries(0): Rider = new_state.apps.get_model(app_label, "Rider")
operation.database_forwards(app_label, editor, project_state, new_state) pony = Pony.objects.create()
with connection.schema_editor() as editor: rider = Rider.objects.create()
with self.assertNumQueries(0): pony.riders.add(rider)
operation.database_backwards(
app_label, editor, new_state, project_state
)
def test_rename_m2m_target_model(self): def test_rename_m2m_target_model(self):
app_label = "test_rename_m2m_target_model" app_label = "test_rename_m2m_target_model"