mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
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.
This commit is contained in:
committed by
Sarah Boyce
parent
b13b8684a0
commit
089deb82b9
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user