Fixed #23503 -- Fixed renaming of model with self-referential m2m field.
This commit is contained in:
parent
83cd18633f
commit
463952d940
|
@ -724,6 +724,12 @@ class BaseDatabaseSchemaEditor(object):
|
||||||
old_field.rel.through._meta.get_field_by_name(old_field.m2m_reverse_field_name())[0],
|
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],
|
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=""):
|
def _create_index_name(self, model, column_names, suffix=""):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -58,3 +58,6 @@ Bugfixes
|
||||||
|
|
||||||
* Added quoting of constraint names in the SQL generated by migrations to
|
* Added quoting of constraint names in the SQL generated by migrations to
|
||||||
prevent crash with uppercase characters in the name (:ticket:`23065`).
|
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`).
|
||||||
|
|
|
@ -472,6 +472,22 @@ class OperationTests(OperationTestBase):
|
||||||
self.assertFKExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_rider", "id"))
|
self.assertFKExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_rider", "id"))
|
||||||
self.assertFKNotExists("test_rmwsrf_rider", ["friend_id"], ("test_rmwsrf_horserider", "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):
|
def test_add_field(self):
|
||||||
"""
|
"""
|
||||||
Tests the AddField operation.
|
Tests the AddField operation.
|
||||||
|
|
Loading…
Reference in New Issue