Refs #27718 -- Doc'd and tested QuerySet.exists() for combined querysets.
Supported since 84c1826ded
.
This commit is contained in:
parent
4cce1d13cf
commit
7b42d34646
|
@ -917,11 +917,11 @@ resulting ``QuerySet``. For example::
|
||||||
>>> qs1.union(qs2).order_by('name')
|
>>> qs1.union(qs2).order_by('name')
|
||||||
|
|
||||||
In addition, only ``LIMIT``, ``OFFSET``, ``COUNT(*)``, ``ORDER BY``, and
|
In addition, only ``LIMIT``, ``OFFSET``, ``COUNT(*)``, ``ORDER BY``, and
|
||||||
specifying columns (i.e. slicing, :meth:`count`, :meth:`order_by`, and
|
specifying columns (i.e. slicing, :meth:`count`, :meth:`exists`,
|
||||||
:meth:`values()`/:meth:`values_list()`) are allowed on the resulting
|
:meth:`order_by`, and :meth:`values()`/:meth:`values_list()`) are allowed
|
||||||
``QuerySet``. Further, databases place restrictions on what operations are
|
on the resulting ``QuerySet``. Further, databases place restrictions on
|
||||||
allowed in the combined queries. For example, most databases don't allow
|
what operations are allowed in the combined queries. For example, most
|
||||||
``LIMIT`` or ``OFFSET`` in the combined queries.
|
databases don't allow ``LIMIT`` or ``OFFSET`` in the combined queries.
|
||||||
|
|
||||||
``intersection()``
|
``intersection()``
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -254,6 +254,29 @@ class QuerySetSetOperationTests(TestCase):
|
||||||
qs2 = Number.objects.filter(num__lte=5)
|
qs2 = Number.objects.filter(num__lte=5)
|
||||||
self.assertEqual(qs1.intersection(qs2).count(), 1)
|
self.assertEqual(qs1.intersection(qs2).count(), 1)
|
||||||
|
|
||||||
|
def test_exists_union(self):
|
||||||
|
qs1 = Number.objects.filter(num__gte=5)
|
||||||
|
qs2 = Number.objects.filter(num__lte=5)
|
||||||
|
self.assertIs(qs1.union(qs2).exists(), True)
|
||||||
|
|
||||||
|
def test_exists_union_empty_result(self):
|
||||||
|
qs = Number.objects.filter(pk__in=[])
|
||||||
|
self.assertIs(qs.union(qs).exists(), False)
|
||||||
|
|
||||||
|
@skipUnlessDBFeature('supports_select_intersection')
|
||||||
|
def test_exists_intersection(self):
|
||||||
|
qs1 = Number.objects.filter(num__gt=5)
|
||||||
|
qs2 = Number.objects.filter(num__lt=5)
|
||||||
|
self.assertIs(qs1.intersection(qs1).exists(), True)
|
||||||
|
self.assertIs(qs1.intersection(qs2).exists(), False)
|
||||||
|
|
||||||
|
@skipUnlessDBFeature('supports_select_difference')
|
||||||
|
def test_exists_difference(self):
|
||||||
|
qs1 = Number.objects.filter(num__gte=5)
|
||||||
|
qs2 = Number.objects.filter(num__gte=3)
|
||||||
|
self.assertIs(qs1.difference(qs2).exists(), False)
|
||||||
|
self.assertIs(qs2.difference(qs1).exists(), True)
|
||||||
|
|
||||||
def test_get_union(self):
|
def test_get_union(self):
|
||||||
qs = Number.objects.filter(num=2)
|
qs = Number.objects.filter(num=2)
|
||||||
self.assertEqual(qs.union(qs).get().num, 2)
|
self.assertEqual(qs.union(qs).get().num, 2)
|
||||||
|
|
Loading…
Reference in New Issue