From 0c487aa3a7b2417481bf48c1e5355c855873e210 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Sat, 18 Oct 2025 15:03:50 +0200 Subject: Fixed #21961 -- Added support for database-level delete options for ForeignKey. Thanks Simon Charette for pair programming. Co-authored-by: Nick Stefan Co-authored-by: Akash Kumar Sen <71623442+Akash-Kumar-Sen@users.noreply.github.com> Co-authored-by: Simon Charette --- tests/admin_utils/models.py | 10 +++++++++- tests/admin_utils/tests.py | 25 +++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) (limited to 'tests/admin_utils') diff --git a/tests/admin_utils/models.py b/tests/admin_utils/models.py index 243f314b03..e5d2b67887 100644 --- a/tests/admin_utils/models.py +++ b/tests/admin_utils/models.py @@ -40,7 +40,7 @@ class ArticleProxy(Article): proxy = True -class Count(models.Model): +class Cascade(models.Model): num = models.PositiveSmallIntegerField() parent = models.ForeignKey("self", models.CASCADE, null=True) @@ -48,6 +48,14 @@ class Count(models.Model): return str(self.num) +class DBCascade(models.Model): + num = models.PositiveSmallIntegerField() + parent = models.ForeignKey("self", models.DB_CASCADE, null=True) + + def __str__(self): + return str(self.num) + + class Event(models.Model): date = models.DateTimeField(auto_now_add=True) diff --git a/tests/admin_utils/tests.py b/tests/admin_utils/tests.py index c90836c6d8..ce32535c52 100644 --- a/tests/admin_utils/tests.py +++ b/tests/admin_utils/tests.py @@ -26,7 +26,17 @@ from django.test.utils import isolate_apps from django.utils.formats import localize from django.utils.safestring import mark_safe -from .models import Article, Car, Count, Event, EventGuide, Location, Site, Vehicle +from .models import ( + Article, + Car, + Cascade, + DBCascade, + Event, + EventGuide, + Location, + Site, + Vehicle, +) class NestedObjectsTests(TestCase): @@ -34,10 +44,12 @@ class NestedObjectsTests(TestCase): Tests for ``NestedObject`` utility collection. """ + cascade_model = Cascade + @classmethod def setUpTestData(cls): cls.n = NestedObjects(using=DEFAULT_DB_ALIAS) - cls.objs = [Count.objects.create(num=i) for i in range(5)] + cls.objs = [cls.cascade_model.objects.create(num=i) for i in range(5)] def _check(self, target): self.assertEqual(self.n.nested(lambda obj: obj.num), target) @@ -103,6 +115,15 @@ class NestedObjectsTests(TestCase): n.collect([Vehicle.objects.first()]) +class DBNestedObjectsTests(NestedObjectsTests): + """ + Exercise NestedObjectsTests but with a model that makes use of DB_CASCADE + instead of CASCADE to ensure proper collection of objects takes place. + """ + + cascade_model = DBCascade + + class UtilsTests(SimpleTestCase): empty_value = "-empty-" -- cgit v1.3