mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #35022 -- Fixed RenameIndex() crash on unnamed indexes if exists unique constraint on the same fields.
This commit is contained in:
parent
6c08dba517
commit
7045661069
@ -1017,7 +1017,10 @@ class RenameIndex(IndexOperation):
|
|||||||
from_model._meta.get_field(field).column for field in self.old_fields
|
from_model._meta.get_field(field).column for field in self.old_fields
|
||||||
]
|
]
|
||||||
matching_index_name = schema_editor._constraint_names(
|
matching_index_name = schema_editor._constraint_names(
|
||||||
from_model, column_names=columns, index=True
|
from_model,
|
||||||
|
column_names=columns,
|
||||||
|
index=True,
|
||||||
|
unique=False,
|
||||||
)
|
)
|
||||||
if len(matching_index_name) != 1:
|
if len(matching_index_name) != 1:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
@ -3626,6 +3626,26 @@ class OperationTests(OperationTestBase):
|
|||||||
with self.assertRaisesMessage(ValueError, msg):
|
with self.assertRaisesMessage(ValueError, msg):
|
||||||
operation.database_forwards(app_label, editor, project_state, new_state)
|
operation.database_forwards(app_label, editor, project_state, new_state)
|
||||||
|
|
||||||
|
@skipUnlessDBFeature("allows_multiple_constraints_on_same_fields")
|
||||||
|
def test_rename_index_unnamed_index_with_unique_index(self):
|
||||||
|
app_label = "test_rninuniwui"
|
||||||
|
project_state = self.set_up_test_model(
|
||||||
|
app_label,
|
||||||
|
multicol_index=True,
|
||||||
|
unique_together=True,
|
||||||
|
)
|
||||||
|
table_name = app_label + "_pony"
|
||||||
|
self.assertIndexNotExists(table_name, "new_pony_test_idx")
|
||||||
|
operation = migrations.RenameIndex(
|
||||||
|
"Pony", new_name="new_pony_test_idx", old_fields=["pink", "weight"]
|
||||||
|
)
|
||||||
|
new_state = project_state.clone()
|
||||||
|
operation.state_forwards(app_label, new_state)
|
||||||
|
# Rename index.
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
operation.database_forwards(app_label, editor, project_state, new_state)
|
||||||
|
self.assertIndexNameExists(table_name, "new_pony_test_idx")
|
||||||
|
|
||||||
def test_add_index_state_forwards(self):
|
def test_add_index_state_forwards(self):
|
||||||
project_state = self.set_up_test_model("test_adinsf")
|
project_state = self.set_up_test_model("test_adinsf")
|
||||||
index = models.Index(fields=["pink"], name="test_adinsf_pony_pink_idx")
|
index = models.Index(fields=["pink"], name="test_adinsf_pony_pink_idx")
|
||||||
|
Loading…
Reference in New Issue
Block a user