summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAnže Pečar <anze@pecar.me>2024-06-13 16:41:50 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-06-13 17:49:22 +0200
commite99187e5c94516ee35f37cc41a36d906b395808d (patch)
tree3f62d2bf8c0e110b7b31a1352b2aa77cebc652d3 /tests
parentd28626ecf8bd340084ed70ff2d88e8dbab001e2c (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.py83
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.