summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2020-10-25 16:04:21 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-10-28 07:22:00 +0100
commit8593e162c9cb63a6c0b06daf045bc1c21eb4d7c1 (patch)
tree96f5b36abb2935c37af1506cdd69ddb541d12ac1 /tests
parentbbf141bcdc31f1324048af9233583a523ac54c94 (diff)
Fixed #32143 -- Used EXISTS to exclude multi-valued relationships.
As mentioned in the pre-existing split_exclude() docstring EXISTS is easier to optimize for query planers and circumvents the IN (NULL) handling issue.
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/tests.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index c98a6adeba..c3e3a40340 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -2807,11 +2807,11 @@ class ExcludeTests(TestCase):
f1 = Food.objects.create(name='apples')
Food.objects.create(name='oranges')
Eaten.objects.create(food=f1, meal='dinner')
- j1 = Job.objects.create(name='Manager')
+ cls.j1 = Job.objects.create(name='Manager')
cls.r1 = Responsibility.objects.create(description='Playing golf')
j2 = Job.objects.create(name='Programmer')
r2 = Responsibility.objects.create(description='Programming')
- JobResponsibilities.objects.create(job=j1, responsibility=cls.r1)
+ JobResponsibilities.objects.create(job=cls.j1, responsibility=cls.r1)
JobResponsibilities.objects.create(job=j2, responsibility=r2)
def test_to_field(self):
@@ -2884,6 +2884,14 @@ class ExcludeTests(TestCase):
[number],
)
+ def test_exclude_multivalued_exists(self):
+ with CaptureQueriesContext(connection) as captured_queries:
+ self.assertSequenceEqual(
+ Job.objects.exclude(responsibilities__description='Programming'),
+ [self.j1],
+ )
+ self.assertIn('exists', captured_queries[0]['sql'].lower())
+
class ExcludeTest17600(TestCase):
"""