Fixed #29778 -- Fixed quoting of unique index names.
Regression in 3b429c9673
.
This commit is contained in:
parent
8624459586
commit
d1d5c97bc2
|
@ -1013,11 +1013,13 @@ class BaseDatabaseSchemaEditor:
|
|||
)
|
||||
|
||||
def _create_unique_sql(self, model, columns):
|
||||
def create_unique_name(*args, **kwargs):
|
||||
return self.quote_name(self._create_index_name(*args, **kwargs))
|
||||
table = model._meta.db_table
|
||||
return Statement(
|
||||
self.sql_create_unique,
|
||||
table=Table(table, self.quote_name),
|
||||
name=IndexName(table, columns, '_uniq', self._create_index_name),
|
||||
name=IndexName(table, columns, '_uniq', create_unique_name),
|
||||
columns=Columns(table, columns, self.quote_name),
|
||||
)
|
||||
|
||||
|
|
|
@ -19,3 +19,6 @@ Bugfixes
|
|||
(:ticket:`29755`).
|
||||
|
||||
* Added compatibility for ``cx_Oracle`` 7 (:ticket:`29759`).
|
||||
|
||||
* Fixed a regression in Django 2.0 where unique index names weren't quoted
|
||||
(:ticket:`29778`).
|
||||
|
|
|
@ -1558,6 +1558,18 @@ class SchemaTests(TransactionTestCase):
|
|||
TagUniqueRename.objects.create(title="bar", slug2="foo")
|
||||
Tag.objects.all().delete()
|
||||
|
||||
def test_unique_name_quoting(self):
|
||||
old_table_name = TagUniqueRename._meta.db_table
|
||||
try:
|
||||
with connection.schema_editor() as editor:
|
||||
editor.create_model(TagUniqueRename)
|
||||
editor.alter_db_table(TagUniqueRename, old_table_name, 'unique-table')
|
||||
TagUniqueRename._meta.db_table = 'unique-table'
|
||||
# This fails if the unique index name isn't quoted.
|
||||
editor.alter_unique_together(TagUniqueRename, [], (('title', 'slug2'),))
|
||||
finally:
|
||||
TagUniqueRename._meta.db_table = old_table_name
|
||||
|
||||
@isolate_apps('schema')
|
||||
@unittest.skipIf(connection.vendor == 'sqlite', 'SQLite naively remakes the table on field alteration.')
|
||||
@skipUnlessDBFeature('supports_foreign_keys')
|
||||
|
|
Loading…
Reference in New Issue