diff options
| author | Tim Graham <timograham@gmail.com> | 2025-11-20 20:18:09 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-11-23 11:53:24 +0100 |
| commit | 57c50d8c1996733cef45204ea069a2c01b2860cc (patch) | |
| tree | ef25923bfc179acb84d09c934fe50ff565a6a929 /tests/delete | |
| parent | ec60df6d1ea8939a316d9b180faa0b4ef2e83606 (diff) | |
Refs #21961 -- Added DatabaseFeatures.supports_on_delete_db_(cascade/null) feature flags.
Needed on MongoDB.
Co-Authored-By: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'tests/delete')
| -rw-r--r-- | tests/delete/models.py | 26 | ||||
| -rw-r--r-- | tests/delete/tests.py | 18 |
2 files changed, 24 insertions, 20 deletions
diff --git a/tests/delete/models.py b/tests/delete/models.py index bd9caf42a7..d8f81827be 100644 --- a/tests/delete/models.py +++ b/tests/delete/models.py @@ -49,17 +49,26 @@ class RelatedDbOptionParent(models.Model): p = models.ForeignKey(RelatedDbOptionGrandParent, models.DB_CASCADE, null=True) -class RelatedDbOption(models.Model): +class CascadeDbModel(models.Model): name = models.CharField(max_length=30) + db_cascade = models.ForeignKey( + RelatedDbOptionParent, models.DB_CASCADE, related_name="db_cascade_set" + ) + + class Meta: + required_db_features = {"supports_on_delete_db_cascade"} + + +class SetNullDbModel(models.Model): db_setnull = models.ForeignKey( RelatedDbOptionParent, models.DB_SET_NULL, null=True, related_name="db_setnull_set", ) - db_cascade = models.ForeignKey( - RelatedDbOptionParent, models.DB_CASCADE, related_name="db_cascade_set" - ) + + class Meta: + required_db_features = {"supports_on_delete_db_null"} class SetDefaultDbModel(models.Model): @@ -159,15 +168,6 @@ def create_a(name): return a -def create_related_db_option(name): - a = RelatedDbOption(name=name) - for name in ["db_setnull", "db_cascade"]: - r = RelatedDbOptionParent.objects.create() - setattr(a, name, r) - a.save() - return a - - class M(models.Model): m2m = models.ManyToManyField(R, related_name="m_set") m2m_through = models.ManyToManyField(R, through="MR", related_name="m_through_set") diff --git a/tests/delete/tests.py b/tests/delete/tests.py index 8d525d1e5f..664cdfb440 100644 --- a/tests/delete/tests.py +++ b/tests/delete/tests.py @@ -15,6 +15,7 @@ from .models import ( Avatar, B, Base, + CascadeDbModel, Child, DeleteBottom, DeleteTop, @@ -34,16 +35,15 @@ from .models import ( RChild, RChildChild, Referrer, - RelatedDbOption, RelatedDbOptionGrandParent, RelatedDbOptionParent, RProxy, S, SetDefaultDbModel, + SetNullDbModel, T, User, create_a, - create_related_db_option, get_default_r, ) @@ -81,10 +81,13 @@ class OnDeleteTests(TestCase): a = A.objects.get(pk=a.pk) self.assertIsNone(a.setnull) + @skipUnlessDBFeature("supports_on_delete_db_null") def test_db_setnull(self): - a = create_related_db_option("db_setnull") + a = SetNullDbModel.objects.create( + db_setnull=RelatedDbOptionParent.objects.create() + ) a.db_setnull.delete() - a = RelatedDbOption.objects.get(pk=a.pk) + a = SetNullDbModel.objects.get(pk=a.pk) self.assertIsNone(a.db_setnull) def test_setdefault(self): @@ -394,20 +397,21 @@ class DeletionTests(TestCase): self.assertNumQueries(5, s.delete) self.assertFalse(S.objects.exists()) + @skipUnlessDBFeature("supports_on_delete_db_cascade") def test_db_cascade(self): related_db_op = RelatedDbOptionParent.objects.create( p=RelatedDbOptionGrandParent.objects.create() ) - RelatedDbOption.objects.bulk_create( + CascadeDbModel.objects.bulk_create( [ - RelatedDbOption(db_cascade=related_db_op) + CascadeDbModel(db_cascade=related_db_op) for _ in range(2 * GET_ITERATOR_CHUNK_SIZE) ] ) with self.assertNumQueries(1): results = related_db_op.delete() self.assertEqual(results, (1, {"delete.RelatedDbOptionParent": 1})) - self.assertFalse(RelatedDbOption.objects.exists()) + self.assertFalse(CascadeDbModel.objects.exists()) self.assertFalse(RelatedDbOptionParent.objects.exists()) def test_instance_update(self): |
