summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2018-04-13 12:15:52 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2018-04-13 12:54:32 +0200
commitf89b11b879b83aa505dc8231da5f06ca4b1b062e (patch)
tree7513e4412c5cbfc8da890248d4d7bf5fecab75a4 /tests
parent46496a542c2ff9f273e090073e9c8071acb1a4a4 (diff)
[1.11.x] Fixed #29286 -- Fixed column mismatch crash with QuerySet.values() or values_list() after combining an annotated and unannotated queryset with union(), difference(), or intersection().
Regression in a0c03c62a8ac586e5be5b21393c925afa581efaf. Thanks Tim Graham and Carlton Gibson for reviews. Backport of 0b66c3b442875627fa6daef4ac1e90900d74290b from master.
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/test_qs_combinators.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/tests/queries/test_qs_combinators.py b/tests/queries/test_qs_combinators.py
index 9083520c24..94af81a49b 100644
--- a/tests/queries/test_qs_combinators.py
+++ b/tests/queries/test_qs_combinators.py
@@ -1,6 +1,6 @@
from __future__ import unicode_literals
-from django.db.models import F, IntegerField, Value
+from django.db.models import Exists, F, IntegerField, OuterRef, Value
from django.db.utils import DatabaseError
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
from django.utils.six.moves import range
@@ -139,6 +139,14 @@ class QuerySetSetOperationTests(TestCase):
).values_list('num', 'count')
self.assertCountEqual(qs1.union(qs2), [(1, 0), (2, 1)])
+ def test_union_with_values_list_on_annotated_and_unannotated(self):
+ ReservedName.objects.create(name='rn1', order=1)
+ qs1 = Number.objects.annotate(
+ has_reserved_name=Exists(ReservedName.objects.filter(order=OuterRef('num')))
+ ).filter(has_reserved_name=True)
+ qs2 = Number.objects.filter(num=9)
+ self.assertCountEqual(qs1.union(qs2).values_list('num', flat=True), [1, 9])
+
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')