summaryrefslogtreecommitdiff
path: root/tests/delete_regress
diff options
context:
space:
mode:
authorbcail <bcail@crossway.org>2024-02-08 17:41:32 +0000
committerGitHub <noreply@github.com>2024-02-08 18:41:32 +0100
commit9c5e382b981608a26f2c55f1259d9e823fee5f15 (patch)
treea3dcb1d700376a7d6f211342fc73cc10468834a1 /tests/delete_regress
parent1b5338d03ecc962af8ab4678426bc60b0672b8dd (diff)
Fixed #35073 -- Avoided unnecessary calling of callables used by SET/SET_DEFAULT in Collector.collect().
Diffstat (limited to 'tests/delete_regress')
-rw-r--r--tests/delete_regress/models.py22
-rw-r--r--tests/delete_regress/tests.py14
2 files changed, 30 insertions, 6 deletions
diff --git a/tests/delete_regress/models.py b/tests/delete_regress/models.py
index cbe6fef334..4bc035e1c7 100644
--- a/tests/delete_regress/models.py
+++ b/tests/delete_regress/models.py
@@ -93,9 +93,6 @@ class Item(models.Model):
location_value = models.ForeignKey(
Location, models.SET(42), default=1, db_constraint=False, related_name="+"
)
- location_default = models.ForeignKey(
- Location, models.SET_DEFAULT, default=1, db_constraint=False, related_name="+"
- )
# Models for #16128
@@ -151,3 +148,22 @@ class OrderedPerson(models.Model):
class Meta:
ordering = ["name"]
+
+
+def get_best_toy():
+ toy, _ = Toy.objects.get_or_create(name="best")
+ return toy
+
+
+def get_worst_toy():
+ toy, _ = Toy.objects.get_or_create(name="worst")
+ return toy
+
+
+class Collector(models.Model):
+ best_toy = models.ForeignKey(
+ Toy, default=get_best_toy, on_delete=models.SET_DEFAULT, related_name="toys"
+ )
+ worst_toy = models.ForeignKey(
+ Toy, models.SET(get_worst_toy), related_name="bad_toys"
+ )
diff --git a/tests/delete_regress/tests.py b/tests/delete_regress/tests.py
index 89f4d5ddd8..ce5a0db8ab 100644
--- a/tests/delete_regress/tests.py
+++ b/tests/delete_regress/tests.py
@@ -408,9 +408,17 @@ class SetQueryCountTests(TestCase):
Item.objects.create(
version=version,
location=location,
- location_default=location,
location_value=location,
)
- # 3 UPDATEs for SET of item values and one for DELETE locations.
- with self.assertNumQueries(4):
+ # 2 UPDATEs for SET of item values and one for DELETE locations.
+ with self.assertNumQueries(3):
location.delete()
+
+
+class SetCallableCollectorDefaultTests(TestCase):
+ def test_set(self):
+ # Collector doesn't call callables used by models.SET and
+ # models.SET_DEFAULT if not necessary.
+ Toy.objects.create(name="test")
+ Toy.objects.all().delete()
+ self.assertSequenceEqual(Toy.objects.all(), [])