From 273bc4b667b964b69b15bc438bcdae3dc6529a2a Mon Sep 17 00:00:00 2001 From: Markus Holtermann Date: Fri, 13 Feb 2015 16:42:44 +0100 Subject: [PATCH] Refs #24282 -- Added failing test case for assigning models of wrong type to FK Thanks Jeff Singer for the test case. --- tests/migrations/test_operations.py | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) 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.