summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--django/db/models/query.py2
-rw-r--r--docs/releases/5.2.2.txt3
-rw-r--r--tests/queries/test_qs_combinators.py7
4 files changed, 13 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index 89626872ab..a3adeceae1 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -239,6 +239,7 @@ answer newbie questions, and generally made Django that much better:
Claude Paroz <claude@2xlibre.net>
Clifford Gama <cliffygamy@gmail.com>
Clint Ecker
+ Colleen Dunlap <https://medium.com/@colleen85052>
colin@owlfish.com
Colin Wood <cwood06@gmail.com>
Collin Anderson <cmawebsite@gmail.com>
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 663f8bade4..8e753e6455 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1550,6 +1550,8 @@ class QuerySet(AltersData):
if len(qs) == 1:
return qs[0]
return qs[0]._combinator_query("union", *qs[1:], all=all)
+ elif not other_qs:
+ return self
return self._combinator_query("union", *other_qs, all=all)
def intersection(self, *other_qs):
diff --git a/docs/releases/5.2.2.txt b/docs/releases/5.2.2.txt
index 22f3009c34..f6787bff08 100644
--- a/docs/releases/5.2.2.txt
+++ b/docs/releases/5.2.2.txt
@@ -15,3 +15,6 @@ Bugfixes
* Fixed a bug in Django 5.2 where subqueries using ``"pk"`` to reference models
with a ``CompositePrimaryKey`` failed to raise ``ValueError`` when too many
or too few columns were selected (:ticket:`36392`).
+
+* Fixed a regression in Django 5.2 that caused a crash when no arguments were
+ passed into ``QuerySet.union()`` (:ticket:`36388`).
diff --git a/tests/queries/test_qs_combinators.py b/tests/queries/test_qs_combinators.py
index ba44b5ed87..e329d0c4f0 100644
--- a/tests/queries/test_qs_combinators.py
+++ b/tests/queries/test_qs_combinators.py
@@ -88,6 +88,13 @@ class QuerySetSetOperationTests(TestCase):
qs3 = qs1.union(qs2)
self.assertNumbersEqual(qs3[:1], [0])
+ def test_union_empty_slice(self):
+ qs = Number.objects.union()
+ self.assertNumbersEqual(qs[:1], [0])
+ qs = Number.objects.union(all=True)
+ self.assertNumbersEqual(qs[:1], [0])
+ self.assertNumbersEqual(qs.order_by("num")[0:], list(range(0, 10)))
+
def test_union_all_none_slice(self):
qs = Number.objects.filter(id__in=[])
with self.assertNumQueries(0):