1
0
mirror of https://github.com/django/django.git synced 2025-10-26 15:16:09 +00:00

[1.10.x] Fixed #27558 -- Prevented redundant index on InnoDB ForeignKey.

The MySQL backend overrides _field_should_be_indexed() so that it skips
index creation for ForeignKeys when using InnoDB.
This commit is contained in:
Ed Morley
2016-12-01 15:54:58 +00:00
committed by Tim Graham
parent 4074fa9145
commit 82ce55dbbe
3 changed files with 18 additions and 1 deletions

View File

@@ -1,6 +1,8 @@
from unittest import skipUnless
from django.db import connection
from django.db.models.deletion import CASCADE
from django.db.models.fields.related import ForeignKey
from django.test import TestCase
from .models import Article, ArticleTranslation, IndexTogetherSingleList
@@ -74,3 +76,15 @@ class SchemaIndexesTests(TestCase):
'CREATE INDEX `indexes_articletranslation_99fb53c2` '
'ON `indexes_articletranslation` (`article_no_constraint_id`)'
])
# The index also shouldn't be created if the ForeignKey is added after
# the model was created.
with connection.schema_editor() as editor:
new_field = ForeignKey(Article, CASCADE)
new_field.set_attributes_from_name('new_foreign_key')
editor.add_field(ArticleTranslation, new_field)
self.assertEqual(editor.deferred_sql, [
'ALTER TABLE `indexes_articletranslation` '
'ADD CONSTRAINT `indexes_articl_new_foreign_key_id_d27a9146_fk_indexes_article_id` '
'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)'
])