Refs #26709 -- Required a name for Indexes passed to AddIndex.
Thanks to Markush for discussions.
This commit is contained in:
parent
f1af076fba
commit
b1e7d19d4c
|
@ -751,6 +751,11 @@ class AddIndex(Operation):
|
||||||
|
|
||||||
def __init__(self, model_name, index):
|
def __init__(self, model_name, index):
|
||||||
self.model_name = model_name
|
self.model_name = model_name
|
||||||
|
if not index._name:
|
||||||
|
raise ValueError(
|
||||||
|
"Indexes passed to AddIndex operations require a name "
|
||||||
|
"argument. %r doesn't have one." % index
|
||||||
|
)
|
||||||
self.index = index
|
self.index = index
|
||||||
|
|
||||||
def state_forwards(self, app_label, state):
|
def state_forwards(self, app_label, state):
|
||||||
|
|
|
@ -215,10 +215,8 @@ For example, to add an index on the ``title`` and ``author`` fields of the
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
If you're writing your own migration to add an index, it's recommended to pass
|
If you're writing your own migration to add an index, you must assign a
|
||||||
a ``name`` to the ``index`` as done above so that you can reference it if you
|
``name`` to the ``index`` as done above.
|
||||||
later want to remove it. Otherwise, a name will be autogenerated and you'll
|
|
||||||
have to inspect the database to find the index name if you want to remove it.
|
|
||||||
|
|
||||||
``RemoveIndex``
|
``RemoveIndex``
|
||||||
---------------
|
---------------
|
||||||
|
|
|
@ -1385,7 +1385,13 @@ class OperationTests(OperationTestBase):
|
||||||
Test the AddIndex operation.
|
Test the AddIndex operation.
|
||||||
"""
|
"""
|
||||||
project_state = self.set_up_test_model("test_adin")
|
project_state = self.set_up_test_model("test_adin")
|
||||||
index = models.Index(fields=["pink"])
|
msg = (
|
||||||
|
"Indexes passed to AddIndex operations require a name argument. "
|
||||||
|
"<Index: fields='pink'> doesn't have one."
|
||||||
|
)
|
||||||
|
with self.assertRaisesMessage(ValueError, msg):
|
||||||
|
migrations.AddIndex("Pony", models.Index(fields=["pink"]))
|
||||||
|
index = models.Index(fields=["pink"], name="test_adin_pony_pink_idx")
|
||||||
operation = migrations.AddIndex("Pony", index)
|
operation = migrations.AddIndex("Pony", index)
|
||||||
self.assertEqual(operation.describe(), "Create index on field(s) pink of model Pony")
|
self.assertEqual(operation.describe(), "Create index on field(s) pink of model Pony")
|
||||||
new_state = project_state.clone()
|
new_state = project_state.clone()
|
||||||
|
|
Loading…
Reference in New Issue