Skip to content

Commit 820c7d3

Browse files
garybadwaljacobtylerwalls
authored andcommitted
Fixed #37036 -- Added missing flat=True arg in DeferredAttribute.fetch_many().
1 parent 241b8e1 commit 820c7d3

4 files changed

Lines changed: 29 additions & 1 deletion

File tree

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ answer newbie questions, and generally made Django that much better:
422422
Grzegorz Ślusarek <grzegorz.slusarek@gmail.com>
423423
Guilherme Mesquita Gondim <semente@taurinus.org>
424424
Guillaume Pannatier <guillaume.pannatier@gmail.com>
425+
Gurpreet Singh <https://www.garybadwal.com/>
425426
Gustavo Picon
426427
hambaloney
427428
Hang Park <hangpark@kaist.ac.kr>

django/db/models/query_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ def fetch_many(self, instances):
296296
db = instances[0]._state.db
297297
value_by_pk = (
298298
self.field.model._base_manager.using(db)
299-
.values_list(attname)
299+
.values_list(attname, flat=True)
300300
.in_bulk({i.pk for i in instances})
301301
)
302302
for instance in instances:

tests/defer/tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,20 @@ def test_defer_fetch_mode_fetch_peers_single(self):
219219
with self.assertNumQueries(1):
220220
p1.value
221221

222+
def test_defer_fk_fetch_mode_fetch_peers(self):
223+
p1, p2 = Primary.objects.fetch_mode(FETCH_PEERS).defer("related")
224+
with self.assertNumQueries(2):
225+
self.assertEqual(p1.related, self.s1)
226+
with self.assertNumQueries(0):
227+
self.assertEqual(p2.related, self.s1)
228+
229+
def test_only_fk_fetch_mode_fetch_peers(self):
230+
p1, p2 = Primary.objects.fetch_mode(FETCH_PEERS).only("name")
231+
with self.assertNumQueries(2):
232+
self.assertEqual(p1.related, self.s1)
233+
with self.assertNumQueries(0):
234+
self.assertEqual(p2.related, self.s1)
235+
222236
def test_only_fetch_mode_raise(self):
223237
p1 = Primary.objects.fetch_mode(RAISE).only("name").get(name="p1")
224238
msg = "Fetching of Primary.value blocked."

tests/many_to_one/tests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,3 +1002,16 @@ def test_fetch_mode_copied_reverse_fetching_many(self):
10021002
a2._state.fetch_mode,
10031003
FETCH_PEERS,
10041004
)
1005+
1006+
def test_fetch_mode_fetch_peers_reverse_with_deferred_fk(self):
1007+
Article.objects.create(
1008+
headline="Another article",
1009+
pub_date=datetime.date(2005, 7, 27),
1010+
reporter=self.r,
1011+
)
1012+
r = Reporter.objects.fetch_mode(FETCH_PEERS).get(pk=self.r.pk)
1013+
a1, a2 = r.article_set.defer("reporter")
1014+
with self.assertNumQueries(2):
1015+
self.assertEqual(a1.reporter, self.r)
1016+
with self.assertNumQueries(0):
1017+
self.assertEqual(a2.reporter, self.r)

0 commit comments

Comments
 (0)