1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

[5.2.x] Fixed #36149 -- Allowed subquery values against tuple exact and in lookups.

Non-tuple exact and in lookups have specialized logic for subqueries that can
be adapted to properly assign select mask if unspecified and ensure the number
of involved members are matching on both side of the operator.

Backport of 41239fe34d from main.
This commit is contained in:
Simon Charette
2025-01-27 23:10:13 -05:00
committed by Sarah Boyce
parent f8fce8d4dc
commit dc1c9b4ddd
12 changed files with 137 additions and 77 deletions

View File

@@ -63,9 +63,11 @@ class TupleLookupsTests(TestCase):
)
def test_exact_subquery(self):
with self.assertRaisesMessage(
ValueError, "'exact' doesn't support multi-column subqueries."
):
msg = (
"The QuerySet value for the exact lookup must have 2 selected "
"fields (received 1)"
)
with self.assertRaisesMessage(ValueError, msg):
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
self.assertSequenceEqual(
Contact.objects.filter(customer=subquery).order_by("id"), ()
@@ -140,11 +142,11 @@ class TupleLookupsTests(TestCase):
def test_tuple_in_subquery_must_have_2_fields(self):
lhs = (F("customer_code"), F("company_code"))
rhs = Customer.objects.values_list("customer_id").query
with self.assertRaisesMessage(
ValueError,
"'in' subquery lookup of ('customer_code', 'company_code') "
"must have 2 fields (received 1)",
):
msg = (
"The QuerySet value for the 'in' lookup must have 2 selected "
"fields (received 1)"
)
with self.assertRaisesMessage(ValueError, msg):
TupleIn(lhs, rhs)
def test_tuple_in_subquery(self):