diff options
| author | Iuri de Silvio <iurisilvio@gmail.com> | 2021-10-16 06:27:14 -0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-10-27 12:41:29 +0200 |
| commit | afeafd6036616bac8263d762c1610f22241c0187 (patch) | |
| tree | 83b0a377e821e8dd4116153b30c57317a8988728 | |
| parent | a754b82dac511475b6276039471ccd17cc64aeb8 (diff) | |
Fixed #33201 -- Made RenameModel operation a noop for models with db_table.
| -rw-r--r-- | django/db/migrations/operations/models.py | 11 | ||||
| -rw-r--r-- | tests/migrations/test_operations.py | 22 |
2 files changed, 28 insertions, 5 deletions
diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index 982816be3a..c120f5d32d 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -320,12 +320,13 @@ class RenameModel(ModelOperation): new_model = to_state.apps.get_model(app_label, self.new_name) if self.allow_migrate_model(schema_editor.connection.alias, new_model): 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 - schema_editor.alter_db_table( - new_model, - old_model._meta.db_table, - new_model._meta.db_table, - ) + schema_editor.alter_db_table(new_model, old_db_table, new_db_table) # Alter the fields pointing to us for related_object in old_model._meta.related_objects: if related_object.related_model == old_model: diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index 11961a1f40..ae6d0f1a92 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -793,6 +793,28 @@ class OperationTests(OperationTestBase): self.assertEqual(Rider.objects.count(), 2) self.assertEqual(Pony._meta.get_field('riders').remote_field.through.objects.count(), 2) + def test_rename_model_with_db_table_noop(self): + app_label = 'test_rmwdbtn' + project_state = self.apply_operations(app_label, ProjectState(), operations=[ + migrations.CreateModel('Rider', fields=[ + ('id', models.AutoField(primary_key=True)), + ], options={'db_table': 'rider'}), + migrations.CreateModel('Pony', fields=[ + ('id', models.AutoField(primary_key=True)), + ('rider', models.ForeignKey('%s.Rider' % app_label, models.CASCADE)), + ]), + ]) + new_state = project_state.clone() + operation = migrations.RenameModel('Rider', 'Runner') + operation.state_forwards(app_label, new_state) + + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_forwards(app_label, editor, project_state, new_state) + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_backwards(app_label, editor, new_state, project_state) + def test_rename_m2m_target_model(self): app_label = "test_rename_m2m_target_model" project_state = self.apply_operations(app_label, ProjectState(), operations=[ |
