diff options
| author | Anže Pečar <anze@pecar.me> | 2024-06-13 16:41:50 +0200 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-06-13 17:49:22 +0200 |
| commit | e99187e5c94516ee35f37cc41a36d906b395808d (patch) | |
| tree | 3f62d2bf8c0e110b7b31a1352b2aa77cebc652d3 /tests | |
| parent | d28626ecf8bd340084ed70ff2d88e8dbab001e2c (diff) | |
Fixed #34881 -- Fixed a crash when renaming a model with multiple ManyToManyField.through references on SQLite.
Thank you to dennisvang for the report and Jase Hackman for the test.
Co-authored-by: Jase Hackman <jase.hackman@zapier.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/migrations/test_operations.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index 1caa647956..6d1435818f 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -1345,6 +1345,89 @@ class OperationTests(OperationTestBase): ponyrider = PonyRider.objects.create() ponyrider.riders.add(jockey) + def test_rename_m2m_field_with_2_references(self): + app_label = "test_rename_multiple_references" + project_state = self.apply_operations( + app_label, + ProjectState(), + operations=[ + migrations.CreateModel( + name="Person", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name="Relation", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "child", + models.ForeignKey( + on_delete=models.CASCADE, + related_name="relations_as_child", + to="test_rename_multiple_references.person", + ), + ), + ( + "parent", + models.ForeignKey( + on_delete=models.CASCADE, + related_name="relations_as_parent", + to="test_rename_multiple_references.person", + ), + ), + ], + ), + migrations.AddField( + model_name="person", + name="parents_or_children", + field=models.ManyToManyField( + blank=True, + through="test_rename_multiple_references.Relation", + to="test_rename_multiple_references.person", + ), + ), + ], + ) + Person = project_state.apps.get_model(app_label, "Person") + Relation = project_state.apps.get_model(app_label, "Relation") + + person1 = Person.objects.create(name="John Doe") + person2 = Person.objects.create(name="Jane Smith") + Relation.objects.create(child=person2, parent=person1) + + self.assertTableExists(app_label + "_person") + self.assertTableNotExists(app_label + "_personfoo") + + self.apply_operations( + app_label, + project_state, + operations=[ + migrations.RenameModel(old_name="Person", new_name="PersonFoo"), + ], + ) + + self.assertTableNotExists(app_label + "_person") + self.assertTableExists(app_label + "_personfoo") + def test_add_field(self): """ Tests the AddField operation. |
