summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/base/schema.py4
-rw-r--r--docs/releases/1.11.9.txt3
-rw-r--r--tests/schema/tests.py22
3 files changed, 27 insertions, 2 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index 2c9e016d11..8802476c07 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -951,7 +951,7 @@ class BaseDatabaseSchemaEditor(object):
def _create_fk_sql(self, model, field, suffix):
from_table = model._meta.db_table
from_column = field.column
- to_table = field.target_field.model._meta.db_table
+ _, to_table = split_identifier(field.target_field.model._meta.db_table)
to_column = field.target_field.column
suffix = suffix % {
"to_table": to_table,
@@ -962,7 +962,7 @@ class BaseDatabaseSchemaEditor(object):
"table": self.quote_name(from_table),
"name": self.quote_name(self._create_index_name(model, [from_column], suffix=suffix)),
"column": self.quote_name(from_column),
- "to_table": self.quote_name(to_table),
+ "to_table": self.quote_name(field.target_field.model._meta.db_table),
"to_column": self.quote_name(to_column),
"deferrable": self.connection.ops.deferrable_sql(),
}
diff --git a/docs/releases/1.11.9.txt b/docs/releases/1.11.9.txt
index c7cca51818..fa480d44bc 100644
--- a/docs/releases/1.11.9.txt
+++ b/docs/releases/1.11.9.txt
@@ -14,3 +14,6 @@ Bugfixes
* Fixed incorrect class-based model index name generation for models with
quoted ``db_table`` (:ticket:`28876`).
+
+* Fixed incorrect foreign key constraint name for models with quoted
+ ``db_table`` (:ticket:`28876`).
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 8e868dfb0e..f3ad54b3bf 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -1784,6 +1784,28 @@ class SchemaTests(TransactionTestCase):
with connection.schema_editor() as editor:
editor.add_field(BookWithLongName, new_field)
+ @isolate_apps('schema')
+ @skipUnlessDBFeature('supports_foreign_keys')
+ def test_add_foreign_key_quoted_db_table(self):
+ class Author(Model):
+ class Meta:
+ db_table = '"table_author_double_quoted"'
+ app_label = 'schema'
+
+ class Book(Model):
+ author = ForeignKey(Author, CASCADE)
+
+ class Meta:
+ app_label = 'schema'
+
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+ editor.create_model(Book)
+ if connection.vendor == 'mysql':
+ self.assertForeignKeyExists(Book, 'author_id', '"table_author_double_quoted"')
+ else:
+ self.assertForeignKeyExists(Book, 'author_id', 'table_author_double_quoted')
+
def test_add_foreign_object(self):
with connection.schema_editor() as editor:
editor.create_model(BookForeignObj)