summaryrefslogtreecommitdiff
path: root/tests/migrations
diff options
context:
space:
mode:
authorDevilsAutumn <bhuvnesh875@gmail.com>2023-02-10 16:32:31 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-02-14 14:08:06 +0100
commitff3a2834224f527ca574b5cd0d578c8c26d51a6c (patch)
tree78349b74eb5e907765974e9e648b80c1fb11db71 /tests/migrations
parentce8189eea007882bbe6db22f86b0965e718bd341 (diff)
downloaddjango-ff3a2834224f527ca574b5cd0d578c8c26d51a6c.tar.gz
Fixed #34250 -- Fixed renaming model with m2m relation to a model with the same name.
Diffstat (limited to 'tests/migrations')
-rw-r--r--tests/migrations/test_operations.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index 129360629d..2f97659046 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -1058,6 +1058,75 @@ class OperationTests(OperationTestBase):
Pony._meta.get_field("riders").remote_field.through.objects.count(), 2
)
+ def test_rename_model_with_m2m_models_in_different_apps_with_same_name(self):
+ app_label_1 = "test_rmw_m2m_1"
+ app_label_2 = "test_rmw_m2m_2"
+ project_state = self.apply_operations(
+ app_label_1,
+ ProjectState(),
+ operations=[
+ migrations.CreateModel(
+ "Rider",
+ fields=[
+ ("id", models.AutoField(primary_key=True)),
+ ],
+ ),
+ ],
+ )
+ project_state = self.apply_operations(
+ app_label_2,
+ project_state,
+ operations=[
+ migrations.CreateModel(
+ "Rider",
+ fields=[
+ ("id", models.AutoField(primary_key=True)),
+ ("riders", models.ManyToManyField(f"{app_label_1}.Rider")),
+ ],
+ ),
+ ],
+ )
+ m2m_table = f"{app_label_2}_rider_riders"
+ self.assertColumnExists(m2m_table, "from_rider_id")
+ self.assertColumnExists(m2m_table, "to_rider_id")
+
+ Rider_1 = project_state.apps.get_model(app_label_1, "Rider")
+ Rider_2 = project_state.apps.get_model(app_label_2, "Rider")
+ rider_2 = Rider_2.objects.create()
+ rider_2.riders.add(Rider_1.objects.create())
+ # Rename model.
+ project_state_2 = project_state.clone()
+ project_state = self.apply_operations(
+ app_label_2,
+ project_state,
+ operations=[migrations.RenameModel("Rider", "Pony")],
+ atomic=connection.features.supports_atomic_references_rename,
+ )
+
+ m2m_table = f"{app_label_2}_pony_riders"
+ self.assertColumnExists(m2m_table, "pony_id")
+ self.assertColumnExists(m2m_table, "rider_id")
+
+ Rider_1 = project_state.apps.get_model(app_label_1, "Rider")
+ Rider_2 = project_state.apps.get_model(app_label_2, "Pony")
+ rider_2 = Rider_2.objects.create()
+ rider_2.riders.add(Rider_1.objects.create())
+ self.assertEqual(Rider_1.objects.count(), 2)
+ self.assertEqual(Rider_2.objects.count(), 2)
+ self.assertEqual(
+ Rider_2._meta.get_field("riders").remote_field.through.objects.count(), 2
+ )
+ # Reversal.
+ self.unapply_operations(
+ app_label_2,
+ project_state_2,
+ operations=[migrations.RenameModel("Rider", "Pony")],
+ atomic=connection.features.supports_atomic_references_rename,
+ )
+ m2m_table = f"{app_label_2}_rider_riders"
+ self.assertColumnExists(m2m_table, "to_rider_id")
+ self.assertColumnExists(m2m_table, "from_rider_id")
+
def test_rename_model_with_db_table_rename_m2m(self):
app_label = "test_rmwdbrm2m"
project_state = self.apply_operations(