diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-12-05 21:11:20 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-12-05 22:52:42 +0100 |
| commit | 1decd0197d241b27d54bb12eca04b7e89a9ccba6 (patch) | |
| tree | 657bb670845a295e4f59c42d23d662a92e6c6830 | |
| parent | 3e52fd7595f80ec162fc44798c29399b7e899b9b (diff) | |
[1.11.x] Refs #28876 -- Fixed incorrect foreign key constraint name for models with quoted db_table.
Thanks Simon Charette and Tim Graham for the review and Carlos E. C.
Leite for the report.
Backport of fc48047586a8f92262f55d9d2bfb976325844b23 from master
| -rw-r--r-- | django/db/backends/base/schema.py | 4 | ||||
| -rw-r--r-- | docs/releases/1.11.9.txt | 3 | ||||
| -rw-r--r-- | tests/schema/tests.py | 22 |
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) |
