diff --git a/django/db/backends/schema.py b/django/db/backends/schema.py index d4573a4be8..a82524b2a0 100644 --- a/django/db/backends/schema.py +++ b/django/db/backends/schema.py @@ -367,6 +367,8 @@ class BaseDatabaseSchemaEditor(object): """ Renames the table a model points to. """ + if old_db_table == new_db_table: + return self.execute(self.sql_rename_table % { "old_table": self.quote_name(old_db_table), "new_table": self.quote_name(new_db_table), diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index b8d1ae5819..7e3e030518 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -769,6 +769,26 @@ class OperationTests(OperationTestBase): self.assertTableExists("test_almota_pony") self.assertTableNotExists("test_almota_pony_2") + def test_alter_model_table_noop(self): + """ + Tests the AlterModelTable operation if the table name is not changed. + """ + project_state = self.set_up_test_model("test_almota") + # Test the state alteration + operation = migrations.AlterModelTable("Pony", "test_almota_pony") + new_state = project_state.clone() + operation.state_forwards("test_almota", new_state) + self.assertEqual(new_state.models["test_almota", "pony"].options["db_table"], "test_almota_pony") + # Test the database alteration + self.assertTableExists("test_almota_pony") + with connection.schema_editor() as editor: + operation.database_forwards("test_almota", editor, project_state, new_state) + self.assertTableExists("test_almota_pony") + # And test reversal + with connection.schema_editor() as editor: + operation.database_backwards("test_almota", editor, new_state, project_state) + self.assertTableExists("test_almota_pony") + def test_alter_field(self): """ Tests the AlterField operation.