Explorar o código

Refs #31044 -- Fixed error message when using Prefetch with a values_list() queryset.

Mariusz Felisiak %!s(int64=5) %!d(string=hai) anos
pai
achega
d6505273cd
Modificáronse 2 ficheiros con 6 adicións e 3 borrados
  1. 2 1
      django/db/models/query.py
  2. 4 2
      tests/prefetch_related/tests.py

+ 2 - 1
django/db/models/query.py

@@ -1541,7 +1541,8 @@ class Prefetch:
             )
         ):
             raise ValueError(
-                'Prefetch querysets cannot use raw() and values().'
+                'Prefetch querysets cannot use raw(), values(), and '
+                'values_list().'
             )
         if to_attr:
             self.prefetch_to = LOOKUP_SEP.join(lookup.split(LOOKUP_SEP)[:-1] + [to_attr])

+ 4 - 2
tests/prefetch_related/tests.py

@@ -815,15 +815,17 @@ class CustomPrefetchTests(TestCase):
             self.traverse_qs(list(houses), [['occupants', 'houses', 'main_room']])
 
     def test_values_queryset(self):
-        msg = 'Prefetch querysets cannot use raw() and values().'
+        msg = 'Prefetch querysets cannot use raw(), values(), and values_list().'
         with self.assertRaisesMessage(ValueError, msg):
             Prefetch('houses', House.objects.values('pk'))
+        with self.assertRaisesMessage(ValueError, msg):
+            Prefetch('houses', House.objects.values_list('pk'))
         # That error doesn't affect managers with custom ModelIterable subclasses
         self.assertIs(Teacher.objects_custom.all()._iterable_class, ModelIterableSubclass)
         Prefetch('teachers', Teacher.objects_custom.all())
 
     def test_raw_queryset(self):
-        msg = 'Prefetch querysets cannot use raw() and values().'
+        msg = 'Prefetch querysets cannot use raw(), values(), and values_list().'
         with self.assertRaisesMessage(ValueError, msg):
             Prefetch('houses', House.objects.raw('select pk from house'))