summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/migrations/operations/models.py5
-rw-r--r--docs/ref/migration-operations.txt6
-rw-r--r--tests/migrations/test_operations.py8
3 files changed, 14 insertions, 5 deletions
diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py
index 4c9467cc0d..888b2851da 100644
--- a/django/db/migrations/operations/models.py
+++ b/django/db/migrations/operations/models.py
@@ -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):
diff --git a/docs/ref/migration-operations.txt b/docs/ref/migration-operations.txt
index 485add5bcc..2de2d1a144 100644
--- a/docs/ref/migration-operations.txt
+++ b/docs/ref/migration-operations.txt
@@ -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``
---------------
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index 01a9c8d886..0d2a6ea9bd 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -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()