Skip to content

Commit e862e68

Browse files
WaVEVtimgraham
authored andcommitted
Added QuerySet.union() test with renames.
1 parent fa47620 commit e862e68

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

tests/queries/test_qs_combinators.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
66
from django.test.utils import CaptureQueriesContext
77

8-
from .models import Author, Celebrity, ExtraInfo, Number, ReservedName
8+
from .models import Author, Celebrity, ExtraInfo, Number, Report, ReservedName
99

1010

1111
@skipUnlessDBFeature("supports_select_union")
@@ -123,6 +123,31 @@ def test_union_nested(self):
123123
ordered=False,
124124
)
125125

126+
def test_union_with_different_models(self):
127+
expected_result = {
128+
"Angel",
129+
"Lionel",
130+
"Emiliano",
131+
"Demetrio",
132+
"Daniel",
133+
"Javier",
134+
}
135+
Celebrity.objects.create(name="Angel")
136+
Celebrity.objects.create(name="Lionel")
137+
Celebrity.objects.create(name="Emiliano")
138+
Celebrity.objects.create(name="Demetrio")
139+
Report.objects.create(name="Demetrio")
140+
Report.objects.create(name="Daniel")
141+
Report.objects.create(name="Javier")
142+
qs1 = Celebrity.objects.values(alias=F("name"))
143+
qs2 = Report.objects.values(alias_author=F("name"))
144+
qs3 = qs1.union(qs2).values("name")
145+
self.assertCountEqual((e["name"] for e in qs3), expected_result)
146+
qs4 = qs1.union(qs2)
147+
self.assertCountEqual((e["alias"] for e in qs4), expected_result)
148+
qs5 = qs2.union(qs1)
149+
self.assertCountEqual((e["alias_author"] for e in qs5), expected_result)
150+
126151
@skipUnlessDBFeature("supports_select_intersection")
127152
def test_intersection_with_empty_qs(self):
128153
qs1 = Number.objects.all()
@@ -474,6 +499,16 @@ def test_count_intersection(self):
474499
qs2 = Number.objects.filter(num__lte=5)
475500
self.assertEqual(qs1.intersection(qs2).count(), 1)
476501

502+
@skipUnlessDBFeature("supports_slicing_ordering_in_compound")
503+
def test_count_union_with_select_related_projected(self):
504+
e1 = ExtraInfo.objects.create(value=1, info="e1")
505+
a1 = Author.objects.create(name="a1", num=1, extra=e1)
506+
qs = Author.objects.select_related("extra").values("pk", "name", "extra__value")
507+
self.assertEqual(len(qs.union(qs)), 1)
508+
self.assertEqual(
509+
qs.union(qs).first(), {"pk": a1.id, "name": "a1", "extra__value": 1}
510+
)
511+
477512
def test_exists_union(self):
478513
qs1 = Number.objects.filter(num__gte=5)
479514
qs2 = Number.objects.filter(num__lte=5)

0 commit comments

Comments
 (0)