From 089deb82b9ac2d002af36fd36f288368cdac4b53 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Sun, 22 Dec 2024 23:00:04 -0500 Subject: Fixed #36025 -- Fixed re-aliasing of iterable (in/range) lookups rhs. In order for Expression.relabeled_clone to work appropriately its get_source_expressions method must return all resolvable which wasn't the case for Lookup when its right-hand-side is "direct" (not a compilable). While refs #22288 added support for non-literals iterable right-hand-side lookups it predated the subclassing of Lookup(Expression) refs #27021 which could have been an opportunity to ensure right-hand-sides are always resolvable (ValueList and ExpressionList). Addressing all edge case with non-resolvable right-hand-sides would require a significant refactor and deprecation of some parts of the Lookup interface so this patch only focuses on FieldGetDbPrepValueIterableMixin (In and Range lookups) by making sure that a right-hand-side containing resolvables are dealt with appropriately during the resolving phase. Thanks Aashay Amballi for the report. --- tests/model_fields/test_jsonfield.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tests/model_fields') diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py index 09f95ce69f..5a9cf9ad7a 100644 --- a/tests/model_fields/test_jsonfield.py +++ b/tests/model_fields/test_jsonfield.py @@ -13,6 +13,7 @@ from django.db import ( OperationalError, connection, models, + transaction, ) from django.db.models import ( Count, @@ -974,7 +975,7 @@ class TestQuerying(TestCase): ("value__i__in", [False, "foo"], [self.objs[4]]), ] for lookup, value, expected in tests: - with self.subTest(lookup=lookup, value=value): + with self.subTest(lookup=lookup, value=value), transaction.atomic(): self.assertCountEqual( NullableJSONModel.objects.filter(**{lookup: value}), expected, -- cgit v1.3