From b1e7d19d4c7015efe0c65361bb7f00a2f1c7047c Mon Sep 17 00:00:00 2001
From: Akshesh <aksheshdoshi@gmail.com>
Date: Thu, 7 Jul 2016 12:00:55 +0530
Subject: [PATCH] Refs #26709 -- Required a name for Indexes passed to
 AddIndex.

Thanks to Markush for discussions.
---
 django/db/migrations/operations/models.py | 5 +++++
 docs/ref/migration-operations.txt         | 6 ++----
 tests/migrations/test_operations.py       | 8 +++++++-
 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()