summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/query.py2
-rw-r--r--tests/prefetch_related/tests.py4
2 files changed, 6 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 03d12cfa08..1cf2a80994 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1331,6 +1331,8 @@ class Prefetch(object):
self.prefetch_through = lookup
# `prefetch_to` is the path to the attribute that stores the result.
self.prefetch_to = lookup
+ if queryset is not None and queryset._iterable_class is not ModelIterable:
+ raise ValueError('Prefetch querysets cannot use values().')
if to_attr:
self.prefetch_to = LOOKUP_SEP.join(lookup.split(LOOKUP_SEP)[:-1] + [to_attr])
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index ef32320c0a..41eee219b8 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -733,6 +733,10 @@ class CustomPrefetchTests(TestCase):
self.assertEqual(str(warns[0].message), msg)
self.assertEqual(str(warns[0].message), msg)
+ def test_values_queryset(self):
+ with self.assertRaisesMessage(ValueError, 'Prefetch querysets cannot use values().'):
+ Prefetch('houses', House.objects.values('pk'))
+
class DefaultManagerTests(TestCase):