Loading django/db/backends/schema.py +6 −0 Original line number Diff line number Diff line Loading @@ -734,6 +734,12 @@ class BaseDatabaseSchemaEditor(object): old_field.rel.through._meta.get_field_by_name(old_field.m2m_reverse_field_name())[0], new_field.rel.through._meta.get_field_by_name(new_field.m2m_reverse_field_name())[0], ) self.alter_field( new_field.rel.through, # for self-referential models we need to alter field from the other end too old_field.rel.through._meta.get_field_by_name(old_field.m2m_field_name())[0], new_field.rel.through._meta.get_field_by_name(new_field.m2m_field_name())[0], ) def _create_index_name(self, model, column_names, suffix=""): """ Loading docs/releases/1.7.1.txt +3 −0 Original line number Diff line number Diff line Loading @@ -58,3 +58,6 @@ Bugfixes * Added quoting of constraint names in the SQL generated by migrations to prevent crash with uppercase characters in the name (:ticket:`23065`). * Fixed renaming of models with a self-referential many-to-many field (``ManyToManyField('self')``) (:ticket:`23503`). tests/migrations/test_operations.py +16 −0 Original line number Diff line number Diff line Loading @@ -472,6 +472,22 @@ class OperationTests(OperationTestBase): self.assertFKExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_rider", "id")) self.assertFKNotExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_horserider", "id")) def test_rename_model_with_self_referential_m2m(self): app_label = "test_rename_model_with_self_referential_m2m" project_state = self.apply_operations(app_label, ProjectState(), operations=[ migrations.CreateModel("ReflexivePony", fields=[ ("ponies", models.ManyToManyField("self")), ]), ]) project_state = self.apply_operations(app_label, project_state, operations=[ migrations.RenameModel("ReflexivePony", "ReflexivePony2"), ]) apps = project_state.render() Pony = apps.get_model(app_label, "ReflexivePony2") pony = Pony.objects.create() pony.ponies.add(pony) def test_add_field(self): """ Tests the AddField operation. Loading Loading
django/db/backends/schema.py +6 −0 Original line number Diff line number Diff line Loading @@ -734,6 +734,12 @@ class BaseDatabaseSchemaEditor(object): old_field.rel.through._meta.get_field_by_name(old_field.m2m_reverse_field_name())[0], new_field.rel.through._meta.get_field_by_name(new_field.m2m_reverse_field_name())[0], ) self.alter_field( new_field.rel.through, # for self-referential models we need to alter field from the other end too old_field.rel.through._meta.get_field_by_name(old_field.m2m_field_name())[0], new_field.rel.through._meta.get_field_by_name(new_field.m2m_field_name())[0], ) def _create_index_name(self, model, column_names, suffix=""): """ Loading
docs/releases/1.7.1.txt +3 −0 Original line number Diff line number Diff line Loading @@ -58,3 +58,6 @@ Bugfixes * Added quoting of constraint names in the SQL generated by migrations to prevent crash with uppercase characters in the name (:ticket:`23065`). * Fixed renaming of models with a self-referential many-to-many field (``ManyToManyField('self')``) (:ticket:`23503`).
tests/migrations/test_operations.py +16 −0 Original line number Diff line number Diff line Loading @@ -472,6 +472,22 @@ class OperationTests(OperationTestBase): self.assertFKExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_rider", "id")) self.assertFKNotExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_horserider", "id")) def test_rename_model_with_self_referential_m2m(self): app_label = "test_rename_model_with_self_referential_m2m" project_state = self.apply_operations(app_label, ProjectState(), operations=[ migrations.CreateModel("ReflexivePony", fields=[ ("ponies", models.ManyToManyField("self")), ]), ]) project_state = self.apply_operations(app_label, project_state, operations=[ migrations.RenameModel("ReflexivePony", "ReflexivePony2"), ]) apps = project_state.render() Pony = apps.get_model(app_label, "ReflexivePony2") pony = Pony.objects.create() pony.ponies.add(pony) def test_add_field(self): """ Tests the AddField operation. Loading