Fixed #33953 -- Reverted "Fixed #33201 -- Made RenameModel operation a noop for models with db_table."
Regression inafeafd6036
. This revertsafeafd6036
. Thanks Timothy Thomas for the report.
This commit is contained in:
parent
71902e0d9f
commit
166a3b3263
|
@ -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:
|
||||||
|
|
|
@ -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`).
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue