diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index a55eb84a173..64e7927f7a4 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 395a298a9e5..77f0eb655c7 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)