diff options
| author | Simon Charette <charette.s@gmail.com> | 2020-10-25 16:04:21 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-10-28 07:22:00 +0100 |
| commit | 8593e162c9cb63a6c0b06daf045bc1c21eb4d7c1 (patch) | |
| tree | 96f5b36abb2935c37af1506cdd69ddb541d12ac1 /tests | |
| parent | bbf141bcdc31f1324048af9233583a523ac54c94 (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.py | 12 |
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): """ |
