1
0
mirror of https://github.com/django/django.git synced 2025-09-24 23:49:12 +00:00

Fixed #36584, Refs #36149 -- Allowed subquery values against tuple in lookup via ForeignObject.

This commit is contained in:
사재혁 2025-09-20 02:15:41 +09:00 committed by GitHub
parent 7528979153
commit 23b6594026
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 6 deletions

View File

@ -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()

View File

@ -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):