summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@gmail.com>2014-03-31 13:09:12 +0700
committerTim Graham <timograham@gmail.com>2014-03-31 06:13:19 -0400
commita449e7feec73c7a14a972721942ce0f649c9d875 (patch)
tree3ee69df58c4f55bdfa41e394327199b3dcd79535
parentcb5dd99bb422dff38d5e804a91fe876f19a884e6 (diff)
Fixed #22359 -- Changing M2M field to blank=True failed on sqlite.
-rw-r--r--django/db/backends/sqlite3/schema.py2
-rw-r--r--tests/migrations/test_operations.py38
2 files changed, 31 insertions, 9 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index c206a020d5..216ff0958a 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -161,7 +161,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
"""
Alters M2Ms to repoint their to= endpoints.
"""
- if old_field.rel.through == new_field.rel.through:
+ if old_field.rel.through._meta.db_table == new_field.rel.through._meta.db_table:
return
# Make a new through table
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index a46858832d..efa16ee7a0 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -14,6 +14,17 @@ class OperationTests(MigrationTestBase):
both forwards and backwards.
"""
+ def apply_operations(self, app_label, project_state, operations):
+ new_state = project_state.clone()
+ for operation in operations:
+ operation.state_forwards(app_label, new_state)
+
+ # Set up the database
+ with connection.schema_editor() as editor:
+ for operation in operations:
+ operation.database_forwards(app_label, editor, project_state, new_state)
+ return new_state
+
def set_up_test_model(self, app_label, second_model=False, related_model=False, mti_model=False):
"""
Creates a test model state and database table.
@@ -67,14 +78,8 @@ class OperationTests(MigrationTestBase):
],
bases=['%s.Pony' % app_label],
))
- project_state = ProjectState()
- for operation in operations:
- operation.state_forwards(app_label, project_state)
- # Set up the database
- with connection.schema_editor() as editor:
- for operation in operations:
- operation.database_forwards(app_label, editor, ProjectState(), project_state)
- return project_state
+
+ return self.apply_operations(app_label, ProjectState(), operations)
def test_create_model(self):
"""
@@ -374,6 +379,23 @@ class OperationTests(MigrationTestBase):
operation.database_backwards("test_adflmm", editor, new_state, project_state)
self.assertTableNotExists("test_adflmm_pony_stables")
+ def test_alter_field_m2m(self):
+ project_state = self.set_up_test_model("test_alflmm", second_model=True)
+
+ project_state = self.apply_operations("test_alflmm", project_state, operations=[
+ migrations.AddField("Pony", "stables", models.ManyToManyField("Stable", related_name="ponies"))
+ ])
+ new_apps = project_state.render()
+ Pony = new_apps.get_model("test_alflmm", "Pony")
+ self.assertFalse(Pony._meta.get_field('stables').blank)
+
+ project_state = self.apply_operations("test_alflmm", project_state, operations=[
+ migrations.AlterField("Pony", "stables", models.ManyToManyField(to="Stable", related_name="ponies", blank=True))
+ ])
+ new_apps = project_state.render()
+ Pony = new_apps.get_model("test_alflmm", "Pony")
+ self.assertTrue(Pony._meta.get_field('stables').blank)
+
def test_remove_field(self):
"""
Tests the RemoveField operation.