summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2015-02-13 16:42:44 +0100
committerMarkus Holtermann <info@markusholtermann.eu>2015-02-16 19:37:57 +0100
commit4e9ecfee7759f365dd75dbf89df0ee9a64ef50aa (patch)
treee2bee526a7d6cc9891c61b5b67b6f3dce56f4cd1
parent8ca0eb2af70b7fbfd9689553d40ef6023433f94e (diff)
[1.8.x] Refs #24282 -- Added failing test case for assigning models of wrong type to FK
Thanks Jeff Singer for the test case. Backport of 273bc4b667b964b69b15bc438bcdae3dc6529a2a from master
-rw-r--r--tests/migrations/test_operations.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index d27ca5eeb5..05e0e535f1 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -1659,6 +1659,60 @@ class OperationTests(OperationTestBase):
self.assertEqual(definition[1], [])
self.assertEqual(sorted(definition[2]), ["atomic", "code"])
+ def test_run_python_related_assignment(self):
+ """
+ #24282 - Tests that model changes to a FK reverse side update the model
+ on the FK side as well.
+ """
+
+ def inner_method(models, schema_editor):
+ Author = models.get_model("test_authors", "Author")
+ Book = models.get_model("test_books", "Book")
+ author = Author.objects.create(name="Hemingway")
+ Book.objects.create(title="Old Man and The Sea", author=author)
+
+ create_author = migrations.CreateModel(
+ "Author",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("name", models.CharField(max_length=100)),
+ ],
+ options={},
+ )
+ create_book = migrations.CreateModel(
+ "Book",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("title", models.CharField(max_length=100)),
+ ("author", models.ForeignKey("test_authors.Author"))
+ ],
+ options={},
+ )
+ add_hometown = migrations.AddField(
+ "Author",
+ "hometown",
+ models.CharField(max_length=100),
+ )
+ create_old_man = migrations.RunPython(inner_method, inner_method)
+
+ project_state = ProjectState()
+ new_state = project_state.clone()
+ with connection.schema_editor() as editor:
+ create_author.state_forwards("test_authors", new_state)
+ create_author.database_forwards("test_authors", editor, project_state, new_state)
+ project_state = new_state
+ new_state = new_state.clone()
+ create_book.state_forwards("test_books", new_state)
+ create_book.database_forwards("test_books", editor, project_state, new_state)
+ project_state = new_state
+ new_state = new_state.clone()
+ add_hometown.state_forwards("test_authors", new_state)
+ add_hometown.database_forwards("test_authors", editor, project_state, new_state)
+ project_state = new_state
+ new_state = new_state.clone()
+ create_old_man.state_forwards("test_books", new_state)
+ create_old_man.database_forwards("test_books", editor, project_state, new_state)
+
def test_run_python_noop(self):
"""
#24098 - Tests no-op RunPython operations.