|
14 | 14 | from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
|
15 | 15 | from django.test.utils import CaptureQueriesContext
|
16 | 16 |
|
17 |
| -from .models import Author, Celebrity, ExtraInfo, Number, ReservedName |
| 17 | +from .models import Author, Celebrity, ExtraInfo, Number, Report, ReservedName |
18 | 18 |
|
19 | 19 |
|
20 | 20 | @skipUnlessDBFeature("supports_select_union")
|
@@ -132,6 +132,31 @@ def test_union_nested(self):
|
132 | 132 | ordered=False,
|
133 | 133 | )
|
134 | 134 |
|
| 135 | + def test_union_with_different_models(self): |
| 136 | + expected_result = { |
| 137 | + "Angel", |
| 138 | + "Lionel", |
| 139 | + "Emiliano", |
| 140 | + "Demetrio", |
| 141 | + "Daniel", |
| 142 | + "Javier", |
| 143 | + } |
| 144 | + Celebrity.objects.create(name="Angel") |
| 145 | + Celebrity.objects.create(name="Lionel") |
| 146 | + Celebrity.objects.create(name="Emiliano") |
| 147 | + Celebrity.objects.create(name="Demetrio") |
| 148 | + Report.objects.create(name="Demetrio") |
| 149 | + Report.objects.create(name="Daniel") |
| 150 | + Report.objects.create(name="Javier") |
| 151 | + qs1 = Celebrity.objects.values(alias=F("name")) |
| 152 | + qs2 = Report.objects.values(alias_author=F("name")) |
| 153 | + qs3 = qs1.union(qs2).values("name") |
| 154 | + self.assertCountEqual((e["name"] for e in qs3), expected_result) |
| 155 | + qs4 = qs1.union(qs2) |
| 156 | + self.assertCountEqual((e["alias"] for e in qs4), expected_result) |
| 157 | + qs5 = qs2.union(qs1) |
| 158 | + self.assertCountEqual((e["alias_author"] for e in qs5), expected_result) |
| 159 | + |
135 | 160 | @skipUnlessDBFeature("supports_select_intersection")
|
136 | 161 | def test_intersection_with_empty_qs(self):
|
137 | 162 | qs1 = Number.objects.all()
|
@@ -500,6 +525,16 @@ def test_count_intersection(self):
|
500 | 525 | qs2 = Number.objects.filter(num__lte=5)
|
501 | 526 | self.assertEqual(qs1.intersection(qs2).count(), 1)
|
502 | 527 |
|
| 528 | + @skipUnlessDBFeature("supports_slicing_ordering_in_compound") |
| 529 | + def test_count_union_with_select_related_projected(self): |
| 530 | + e1 = ExtraInfo.objects.create(value=1, info="e1") |
| 531 | + a1 = Author.objects.create(name="a1", num=1, extra=e1) |
| 532 | + qs = Author.objects.select_related("extra").values("pk", "name", "extra__value") |
| 533 | + self.assertEqual(len(qs.union(qs)), 1) |
| 534 | + self.assertEqual( |
| 535 | + qs.union(qs).first(), {"pk": a1.id, "name": "a1", "extra__value": 1} |
| 536 | + ) |
| 537 | + |
503 | 538 | def test_exists_union(self):
|
504 | 539 | qs1 = Number.objects.filter(num__gte=5)
|
505 | 540 | qs2 = Number.objects.filter(num__lte=5)
|
|
0 commit comments