diff options
| author | bcail <bcail@crossway.org> | 2024-02-08 17:41:32 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-08 18:41:32 +0100 |
| commit | 9c5e382b981608a26f2c55f1259d9e823fee5f15 (patch) | |
| tree | a3dcb1d700376a7d6f211342fc73cc10468834a1 /tests/delete_regress | |
| parent | 1b5338d03ecc962af8ab4678426bc60b0672b8dd (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.py | 22 | ||||
| -rw-r--r-- | tests/delete_regress/tests.py | 14 |
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(), []) |
