diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2014-08-04 11:58:44 +1000 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2014-08-04 11:59:48 +1000 |
| commit | a918c60c378b575ca52ebcfae977056b8bc5a4de (patch) | |
| tree | 6ca3ec8882bea8a286cdc4726283a031ea31dde1 /tests/schema | |
| parent | 99f3a65c730f643d35d959aa9a693101b2d21efd (diff) | |
[1.7.x] Fixed #23091: CreateModel and AddField were clashing with deferred SQL
Diffstat (limited to 'tests/schema')
| -rw-r--r-- | tests/schema/tests.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 0bbf4302c9..64726aff4e 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -331,6 +331,48 @@ class SchemaTests(TransactionTestCase): self.assertEqual(columns['name'][0], "TextField") self.assertEqual(bool(columns['name'][1][6]), False) + @unittest.skipUnless(connection.features.supports_foreign_keys, "No FK support") + def test_alter_fk(self): + """ + Tests altering of FKs + """ + # Create the table + with connection.schema_editor() as editor: + editor.create_model(Author) + editor.create_model(Book) + # Ensure the field is right to begin with + columns = self.column_classes(Book) + self.assertEqual(columns['author_id'][0], "IntegerField") + # Make sure the FK constraint is present + constraints = self.get_constraints(Book._meta.db_table) + for name, details in constraints.items(): + if details['columns'] == ["author_id"] and details['foreign_key']: + self.assertEqual(details['foreign_key'], ('schema_author', 'id')) + break + else: + self.fail("No FK constraint for author_id found") + # Alter the FK + new_field = ForeignKey(Author, editable=False) + new_field.set_attributes_from_name("author") + with connection.schema_editor() as editor: + editor.alter_field( + Book, + Book._meta.get_field_by_name("author")[0], + new_field, + strict=True, + ) + # Ensure the field is right afterwards + columns = self.column_classes(Book) + self.assertEqual(columns['author_id'][0], "IntegerField") + # Make sure the FK constraint is present + constraints = self.get_constraints(Book._meta.db_table) + for name, details in constraints.items(): + if details['columns'] == ["author_id"] and details['foreign_key']: + self.assertEqual(details['foreign_key'], ('schema_author', 'id')) + break + else: + self.fail("No FK constraint for author_id found") + def test_rename(self): """ Tests simple altering of fields |
