summaryrefslogtreecommitdiff
path: root/tests/prefetch_related/test_prefetch_related_objects.py
diff options
context:
space:
mode:
authorblingblin-g <luvbliny@gmail.com>2025-07-31 00:03:27 +0900
committerJacob Walls <jacobtylerwalls@gmail.com>2025-09-16 14:14:23 -0400
commite08fa42fa6d0e9f2a74e8fcdc5a47f5c3b825877 (patch)
treee0073b0fa22279f46b3156a5397760cb4f9d2458 /tests/prefetch_related/test_prefetch_related_objects.py
parente059bbec96ed85d5f4d63893d687c8af966430c8 (diff)
Fixed #36426 -- Added support for further iterables in prefetch_related_objects().
Thanks Sarah Boyce for the review.
Diffstat (limited to 'tests/prefetch_related/test_prefetch_related_objects.py')
-rw-r--r--tests/prefetch_related/test_prefetch_related_objects.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/prefetch_related/test_prefetch_related_objects.py b/tests/prefetch_related/test_prefetch_related_objects.py
index eea9a7fff7..20f620417a 100644
--- a/tests/prefetch_related/test_prefetch_related_objects.py
+++ b/tests/prefetch_related/test_prefetch_related_objects.py
@@ -1,3 +1,5 @@
+from collections import deque
+
from django.db.models import Prefetch, prefetch_related_objects
from django.test import TestCase
@@ -221,3 +223,32 @@ class PrefetchRelatedObjectsTests(TestCase):
with self.assertNumQueries(0):
self.assertCountEqual(book1.authors.all(), [self.author1, self.author2])
+
+ def test_prefetch_related_objects_with_various_iterables(self):
+ book = self.book1
+
+ class MyIterable:
+ def __iter__(self):
+ yield book
+
+ cases = {
+ "set": {book},
+ "tuple": (book,),
+ "dict_values": {"a": book}.values(),
+ "frozenset": frozenset([book]),
+ "deque": deque([book]),
+ "custom iterator": MyIterable(),
+ }
+ for case_type, case in cases.items():
+ with self.subTest(case=case_type):
+ # Clear the prefetch cache.
+ book._prefetched_objects_cache = {}
+ with self.assertNumQueries(1):
+ prefetch_related_objects(case, "authors")
+ with self.assertNumQueries(0):
+ self.assertCountEqual(
+ book.authors.all(), [self.author1, self.author2, self.author3]
+ )
+
+ def test_prefetch_related_objects_empty(self):
+ prefetch_related_objects([], "authors")