summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/sql/query.py5
-rw-r--r--docs/releases/5.2.2.txt4
-rw-r--r--tests/composite_pk/test_filter.py8
3 files changed, 16 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 4d31c36175..92a09c5840 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1227,7 +1227,10 @@ class Query(BaseExpression):
@property
def _subquery_fields_len(self):
if self.has_select_fields:
- return len(self.selected)
+ 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)
def resolve_expression(self, query, *args, **kwargs):
diff --git a/docs/releases/5.2.2.txt b/docs/releases/5.2.2.txt
index 1af581e60c..22f3009c34 100644
--- a/docs/releases/5.2.2.txt
+++ b/docs/releases/5.2.2.txt
@@ -11,3 +11,7 @@ Bugfixes
* Fixed a crash when using ``select_related`` against a ``ForeignObject``
originating from a model with a ``CompositePrimaryKey`` (:ticket:`36373`).
+
+* Fixed a bug in Django 5.2 where subqueries using ``"pk"`` to reference models
+ with a ``CompositePrimaryKey`` failed to raise ``ValueError`` when too many
+ or too few columns were selected (:ticket:`36392`).
diff --git a/tests/composite_pk/test_filter.py b/tests/composite_pk/test_filter.py
index 39f19daecc..c00b6660d8 100644
--- a/tests/composite_pk/test_filter.py
+++ b/tests/composite_pk/test_filter.py
@@ -206,6 +206,14 @@ class CompositePKFilterTests(TestCase):
[self.comment_1],
)
+ def test_filter_by_pk_in_subquery_invalid_selected_columns(self):
+ msg = (
+ "The QuerySet value for the 'in' lookup must have 2 selected "
+ "fields (received 3)"
+ )
+ with self.assertRaisesMessage(ValueError, msg):
+ Comment.objects.filter(pk__in=Comment.objects.values("pk", "text"))
+
def test_filter_by_pk_in_none(self):
with self.assertNumQueries(0):
self.assertSequenceEqual(