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):
|
||||
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
|
||||
|
||||
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
|
||||
a ``name`` to the ``index`` as done above so that you can reference it if you
|
||||
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.
|
||||
If you're writing your own migration to add an index, you must assign a
|
||||
``name`` to the ``index`` as done above.
|
||||
|
||||
``RemoveIndex``
|
||||
---------------
|
||||
|
|
|
@ -1385,7 +1385,13 @@ class OperationTests(OperationTestBase):
|
|||
Test the AddIndex operation.
|
||||
"""
|
||||
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)
|
||||
self.assertEqual(operation.describe(), "Create index on field(s) pink of model Pony")
|
||||
new_state = project_state.clone()
|
||||
|
|
Loading…
Reference in New Issue