diff options
| author | Adam Johnson <me@adamj.eu> | 2023-11-29 09:35:34 +0000 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2025-10-16 14:52:22 -0400 |
| commit | e097e8a12f21a4e92594830f1ad1942b31916d0f (patch) | |
| tree | 43f448bf968f0c6c1a48577cbc4d1ba5b920624a /tests/many_to_one | |
| parent | f6bd90c84050a1c74fe2161cced00e7282cb845c (diff) | |
Fixed #28586 -- Added model field fetch modes.
May your database queries be much reduced with minimal effort.
co-authored-by: Andreas Pelme <andreas@pelme.se>
co-authored-by: Simon Charette <charette.s@gmail.com>
co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
Diffstat (limited to 'tests/many_to_one')
| -rw-r--r-- | tests/many_to_one/tests.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/many_to_one/tests.py b/tests/many_to_one/tests.py index ac43c0da95..c5fa458570 100644 --- a/tests/many_to_one/tests.py +++ b/tests/many_to_one/tests.py @@ -1,8 +1,13 @@ import datetime from copy import deepcopy -from django.core.exceptions import FieldError, MultipleObjectsReturned +from django.core.exceptions import ( + FieldError, + FieldFetchBlocked, + MultipleObjectsReturned, +) from django.db import IntegrityError, models, transaction +from django.db.models import FETCH_PEERS, RAISE from django.test import TestCase from django.utils.translation import gettext_lazy @@ -916,3 +921,23 @@ class ManyToOneTests(TestCase): instances=countries, querysets=[City.objects.all(), City.objects.all()], ) + + def test_fetch_mode_fetch_peers_forward(self): + Article.objects.create( + headline="This is another test", + pub_date=datetime.date(2005, 7, 27), + reporter=self.r2, + ) + a1, a2 = Article.objects.fetch_mode(FETCH_PEERS) + with self.assertNumQueries(1): + a1.reporter + with self.assertNumQueries(0): + a2.reporter + + def test_fetch_mode_raise_forward(self): + a = Article.objects.fetch_mode(RAISE).get(pk=self.a.pk) + msg = "Fetching of Article.reporter blocked." + with self.assertRaisesMessage(FieldFetchBlocked, msg) as cm: + a.reporter + self.assertIsNone(cm.exception.__cause__) + self.assertTrue(cm.exception.__suppress_context__) |
