diff options
| author | mgaligniana <marcelogaligniana@gmail.com> | 2022-04-11 09:25:26 -0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-04-12 08:18:22 +0200 |
| commit | 0ad5316f22eabe8fa8b22dc92e61170cfacc3c78 (patch) | |
| tree | 93fb5aeda702eee5be994d73bc8324fb7f2a9520 | |
| parent | d2263b7b87a2af5dcd6964937b157b7e1cf2881f (diff) | |
Fixed #24296 -- Made QuerySet.exists() clear selected columns for not sliced distinct querysets.
| -rw-r--r-- | django/db/models/sql/query.py | 2 | ||||
| -rw-r--r-- | tests/queries/tests.py | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index a55eb84a17..64e7927f7a 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -562,7 +562,7 @@ class Query(BaseExpression): def exists(self, using, limit=True): q = self.clone() - if not q.distinct: + if not (q.distinct and q.is_sliced): if q.group_by is True: q.add_fields( (f.attname for f in self.model._meta.concrete_fields), False diff --git a/tests/queries/tests.py b/tests/queries/tests.py index 395a298a9e..77f0eb655c 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -2226,6 +2226,14 @@ class ExistsSql(TestCase): self.assertNotIn(id, qstr) self.assertNotIn(name, qstr) + def test_distinct_exists(self): + with CaptureQueriesContext(connection) as captured_queries: + self.assertIs(Article.objects.distinct().exists(), False) + self.assertEqual(len(captured_queries), 1) + captured_sql = captured_queries[0]["sql"] + self.assertNotIn(connection.ops.quote_name("id"), captured_sql) + self.assertNotIn(connection.ops.quote_name("name"), captured_sql) + def test_sliced_distinct_exists(self): with CaptureQueriesContext(connection) as captured_queries: self.assertIs(Article.objects.distinct()[1:3].exists(), False) |
