diff options
| author | blingblin-g <luvbliny@gmail.com> | 2025-07-31 00:03:27 +0900 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2025-09-16 14:14:23 -0400 |
| commit | e08fa42fa6d0e9f2a74e8fcdc5a47f5c3b825877 (patch) | |
| tree | e0073b0fa22279f46b3156a5397760cb4f9d2458 /tests/prefetch_related/test_prefetch_related_objects.py | |
| parent | e059bbec96ed85d5f4d63893d687c8af966430c8 (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.py | 31 |
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") |
