summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2014-06-16 00:27:14 -0700
committerAndrew Godwin <andrew@aeracode.org>2014-06-16 00:27:32 -0700
commitc8c79367a26a6cdc076e5f188094dd898a043ed2 (patch)
tree3ac54159309349371fa5525b537f733ef0bdede9
parentd17a4cb0378b89f2e3e949e708577bd353cd4363 (diff)
Fixed #22844: Duplicate SQL for SQLite FKs
-rw-r--r--django/db/backends/sqlite3/schema.py4
-rw-r--r--tests/migrations/test_operations.py43
2 files changed, 46 insertions, 1 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index 31d72f6537..9b62b66578 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -104,7 +104,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
body['__module__'] = model.__module__
temp_model = type(model._meta.object_name, model.__bases__, body)
- # Create a new table with that format
+ # Create a new table with that format. We remove things from the
+ # deferred SQL that match our table name, too
+ self.deferred_sql = [x for x in self.deferred_sql if model._meta.db_table not in x]
self.create_model(temp_model)
# Copy data from the old table
field_maps = list(mapping.items())
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index 886d35e822..fb2bb0b785 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -156,6 +156,49 @@ class OperationTests(MigrationTestBase):
self.assertEqual(len(definition[2]), 0)
self.assertEqual(definition[1][0], "Pony")
+ def test_create_model_with_unique_after(self):
+ """
+ Tests the CreateModel operation directly followed by an
+ AlterUniqueTogether (bug #22844 - sqlite remake issues)
+ """
+ operation1 = migrations.CreateModel(
+ "Pony",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("pink", models.IntegerField(default=1)),
+ ],
+ )
+ operation2 = migrations.CreateModel(
+ "Rider",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("number", models.IntegerField(default=1)),
+ ("pony", models.ForeignKey("test_crmoua.Pony")),
+ ],
+ )
+ operation3 = migrations.AlterUniqueTogether(
+ "Rider",
+ [
+ ("number", "pony"),
+ ],
+ )
+ # Test the database alteration
+ project_state = ProjectState()
+ self.assertTableNotExists("test_crmoua_pony")
+ self.assertTableNotExists("test_crmoua_rider")
+ with connection.schema_editor() as editor:
+ new_state = project_state.clone()
+ operation1.state_forwards("test_crmoua", new_state)
+ operation1.database_forwards("test_crmoua", editor, project_state, new_state)
+ project_state, new_state = new_state, new_state.clone()
+ operation2.state_forwards("test_crmoua", new_state)
+ operation2.database_forwards("test_crmoua", editor, project_state, new_state)
+ project_state, new_state = new_state, new_state.clone()
+ operation3.state_forwards("test_crmoua", new_state)
+ operation3.database_forwards("test_crmoua", editor, project_state, new_state)
+ self.assertTableExists("test_crmoua_pony")
+ self.assertTableExists("test_crmoua_rider")
+
def test_create_model_m2m(self):
"""
Test the creation of a model with a ManyToMany field and the