summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author사재혁 <wogur981208@gmail.com>2025-09-20 02:15:41 +0900
committerGitHub <noreply@github.com>2025-09-19 13:15:41 -0400
commit23b659402663dace32a04a0bf15dd13e5bfadc7e (patch)
tree571686141d636d36f56b37a0504f1466b3c5ca82
parent7528979153355faa49c3e49ba3ea233f998a7583 (diff)
Fixed #36584, Refs #36149 -- Allowed subquery values against tuple in lookup via ForeignObject.
-rw-r--r--django/db/models/sql/query.py11
-rw-r--r--tests/composite_pk/test_filter.py5
2 files changed, 10 insertions, 6 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index f332d83946..f0865f5f78 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1249,12 +1249,11 @@ class Query(BaseExpression):
@property
def _subquery_fields_len(self):
- if self.has_select_fields:
- return sum(
- len(self.model._meta.pk_fields) if field == "pk" else 1
- for field in self.selected
- )
- return len(self.model._meta.pk_fields)
+ if not self.has_select_fields or not self.select:
+ return len(self.model._meta.pk_fields)
+ return len(self.select) + sum(
+ len(expr.targets) - 1 for expr in self.select if isinstance(expr, ColPairs)
+ )
def resolve_expression(self, query, *args, **kwargs):
clone = self.clone()
diff --git a/tests/composite_pk/test_filter.py b/tests/composite_pk/test_filter.py
index d7ecfbec11..c4b393d6ea 100644
--- a/tests/composite_pk/test_filter.py
+++ b/tests/composite_pk/test_filter.py
@@ -460,6 +460,11 @@ class CompositePKFilterTests(TestCase):
queryset = User.objects.filter(comments__in=subquery)
self.assertSequenceEqual(queryset, (self.user_2,))
+ def test_filter_comments_by_users_subquery(self):
+ subquery = Comment.objects.filter(id=3).values("user")
+ queryset = Comment.objects.filter(user__in=subquery)
+ self.assertSequenceEqual(queryset, (self.comment_3,))
+
def test_cannot_cast_pk(self):
msg = "Cast expression does not support composite primary keys."
with self.assertRaisesMessage(ValueError, msg):