1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #32627 -- Fixed QuerySet.values()/values_list() crash on combined querysets ordered by unannotated columns.

This commit is contained in:
Iuri de Silvio
2021-04-08 16:31:45 -03:00
committed by Mariusz Felisiak
parent 823a9e6bac
commit 9760e262f8
3 changed files with 34 additions and 5 deletions

View File

@@ -5,7 +5,7 @@ from django.db.models import Exists, F, IntegerField, OuterRef, Value
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
from django.test.utils import CaptureQueriesContext
from .models import Number, ReservedName
from .models import Celebrity, Number, ReservedName
@skipUnlessDBFeature('supports_select_union')
@@ -234,6 +234,24 @@ class QuerySetSetOperationTests(TestCase):
operator.itemgetter('num'),
)
def test_union_multiple_models_with_values_list_and_order(self):
reserved_name = ReservedName.objects.create(name='rn1', order=0)
qs1 = Celebrity.objects.all()
qs2 = ReservedName.objects.all()
self.assertSequenceEqual(
qs1.union(qs2).order_by('name').values_list('pk', flat=True),
[reserved_name.pk],
)
def test_union_multiple_models_with_values_list_and_order_by_extra_select(self):
reserved_name = ReservedName.objects.create(name='rn1', order=0)
qs1 = Celebrity.objects.extra(select={'extra_name': 'name'})
qs2 = ReservedName.objects.extra(select={'extra_name': 'name'})
self.assertSequenceEqual(
qs1.union(qs2).order_by('extra_name').values_list('pk', flat=True),
[reserved_name.pk],
)
def test_count_union(self):
qs1 = Number.objects.filter(num__lte=1).values('num')
qs2 = Number.objects.filter(num__gte=2, num__lte=3).values('num')