Commit 7ec330ee authored by Simon Charette's avatar Simon Charette
Browse files

Refs #26565 -- Errored nicely when using Prefetch with a values() queryset.

Thanks Maxime Lorant for the report and Anssi for the suggestion.
parent 8a47ba67
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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])

+4 −0
Original line number Diff line number Diff line
@@ -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):