Loading django/db/models/query.py +6 −5 Original line number Diff line number Diff line Loading @@ -1421,11 +1421,12 @@ def prefetch_related_objects(model_instances, *related_lookups): if not hasattr(obj, '_prefetched_objects_cache'): try: obj._prefetched_objects_cache = {} except AttributeError: # Must be in a QuerySet subclass that is not returning # Model instances, either in Django or 3rd # party. prefetch_related() doesn't make sense, so quit # now. except (AttributeError, TypeError): # Must be an immutable object from # values_list(flat=True), for example (TypeError) or # a QuerySet subclass that isn't returning Model # instances (AttributeError), either in Django or a 3rd # party. prefetch_related() doesn't make sense, so quit. good_objects = False break if not good_objects: Loading tests/prefetch_related/test_uuid.py +11 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,17 @@ class UUIDPrefetchRelated(TestCase): with self.assertNumQueries(0): self.assertEqual(2, len(flea.pets_visited.all())) def test_prefetch_related_from_uuid_model_to_uuid_model_with_values_flat(self): pet = Pet.objects.create(name='Fifi') pet.people.add( Person.objects.create(name='Ellen'), Person.objects.create(name='George'), ) self.assertSequenceEqual( Pet.objects.prefetch_related('fleas_hosted').values_list('id', flat=True), [pet.id] ) class UUIDPrefetchRelatedLookups(TestCase): Loading Loading
django/db/models/query.py +6 −5 Original line number Diff line number Diff line Loading @@ -1421,11 +1421,12 @@ def prefetch_related_objects(model_instances, *related_lookups): if not hasattr(obj, '_prefetched_objects_cache'): try: obj._prefetched_objects_cache = {} except AttributeError: # Must be in a QuerySet subclass that is not returning # Model instances, either in Django or 3rd # party. prefetch_related() doesn't make sense, so quit # now. except (AttributeError, TypeError): # Must be an immutable object from # values_list(flat=True), for example (TypeError) or # a QuerySet subclass that isn't returning Model # instances (AttributeError), either in Django or a 3rd # party. prefetch_related() doesn't make sense, so quit. good_objects = False break if not good_objects: Loading
tests/prefetch_related/test_uuid.py +11 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,17 @@ class UUIDPrefetchRelated(TestCase): with self.assertNumQueries(0): self.assertEqual(2, len(flea.pets_visited.all())) def test_prefetch_related_from_uuid_model_to_uuid_model_with_values_flat(self): pet = Pet.objects.create(name='Fifi') pet.people.add( Person.objects.create(name='Ellen'), Person.objects.create(name='George'), ) self.assertSequenceEqual( Pet.objects.prefetch_related('fleas_hosted').values_list('id', flat=True), [pet.id] ) class UUIDPrefetchRelatedLookups(TestCase): Loading