summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2017-04-07 17:47:53 +0200
committerTim Graham <timograham@gmail.com>2017-04-07 11:48:25 -0400
commitf9d2a20d7b6cbef24199332d28534e3e16fa20d9 (patch)
treed86b75e4454e73cf5da8dbf420237b77cad5b4d2
parent0cb009aa488f4c66d2b434bf3df13e719b2e2fc6 (diff)
[1.11.x] Fixed #28051 -- Made migrations respect Index's name argument.
Thanks Marc Tamlyn for the report and Tim Graham for the review. Backport of d3cf75ec6fbdd2c1f1bb1e6ccb48d4de1da2952b from master
-rw-r--r--django/db/migrations/state.py3
-rw-r--r--docs/releases/1.11.1.txt4
-rw-r--r--tests/migrations/test_state.py13
3 files changed, 18 insertions, 2 deletions
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py
index b6540f5f10..e2253d74c4 100644
--- a/django/db/migrations/state.py
+++ b/django/db/migrations/state.py
@@ -463,7 +463,8 @@ class ModelState(object):
elif name == "indexes":
indexes = [idx.clone() for idx in model._meta.indexes]
for index in indexes:
- index.set_name_with_model(model)
+ if not index.name:
+ index.set_name_with_model(model)
options['indexes'] = indexes
else:
options[name] = model._meta.original_attrs[name]
diff --git a/docs/releases/1.11.1.txt b/docs/releases/1.11.1.txt
index c9f8208271..101988819a 100644
--- a/docs/releases/1.11.1.txt
+++ b/docs/releases/1.11.1.txt
@@ -9,4 +9,6 @@ Django 1.11.1 fixes several bugs in 1.11.
Bugfixes
========
-* ...
+* Made migrations respect ``Index``’s ``name`` argument. If you created a
+ named index with Django 1.11, ``makemigrations`` will create a migration to
+ recreate the index with the correct name (:ticket:`28051`).
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index 68c3b98391..c929df3182 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -1071,6 +1071,19 @@ class ModelStateTests(SimpleTestCase):
child1_state.options['indexes'][0].name = 'bar'
self.assertEqual(Child1._meta.indexes[0].name, 'migrations__name_b0afd7_idx')
+ @isolate_apps('migrations')
+ def test_explicit_index_name(self):
+ class TestModel(models.Model):
+ name = models.CharField(max_length=50)
+
+ class Meta:
+ app_label = 'migrations'
+ indexes = [models.indexes.Index(fields=['name'], name='foo_idx')]
+
+ model_state = ModelState.from_model(TestModel)
+ index_names = [index.name for index in model_state.options['indexes']]
+ self.assertEqual(index_names, ['foo_idx'])
+
class RelatedModelsTests(SimpleTestCase):