summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClifford Gama <cliffygamy@gmail.com>2025-11-14 09:18:09 +0200
committerJacob Walls <jacobtylerwalls@gmail.com>2025-12-10 17:45:51 -0500
commit9b8e4c6d7d47f7b2e96817ba334e9fd53c10a0df (patch)
tree16dfd8601dfe0228be45a2ec247021f24b695fc6
parent66fed37ecb78daf0a50e95151a752b5760293514 (diff)
Refs #36689 -- Serialized JSONIn rhs parameters wrapped in Value expressions.
-rw-r--r--django/db/models/fields/json.py7
-rw-r--r--tests/model_fields/test_jsonfield.py1
2 files changed, 4 insertions, 4 deletions
diff --git a/django/db/models/fields/json.py b/django/db/models/fields/json.py
index c4817317f0..71c3f4d335 100644
--- a/django/db/models/fields/json.py
+++ b/django/db/models/fields/json.py
@@ -429,12 +429,11 @@ class JSONIn(ProcessJSONLHSMixin, lookups.In):
sql,
param,
)
- if (
- not hasattr(param, "as_sql")
- and not connection.features.has_native_json_field
+ if not connection.features.has_native_json_field and (
+ not hasattr(param, "as_sql") or isinstance(param, expressions.Value)
):
if connection.vendor == "oracle":
- value = json.loads(param)
+ value = param.value if hasattr(param, "value") else json.loads(param)
sql = "%s(JSON_OBJECT('value' VALUE %%s FORMAT JSON), '$.value')"
if isinstance(value, (list, dict)):
sql %= "JSON_QUERY"
diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py
index cd3cad734e..7ab5d17086 100644
--- a/tests/model_fields/test_jsonfield.py
+++ b/tests/model_fields/test_jsonfield.py
@@ -1044,6 +1044,7 @@ class TestQuerying(TestCase):
("value__foo__in", [F("value__bax__foo"), "baz"], [self.objs[7]]),
("value__foo__in", ["bar", "baz"], [self.objs[7]]),
("value__bar__in", [["foo", "bar"]], [self.objs[7]]),
+ ("value__bar__in", [Value(["foo", "bar"], JSONField())], [self.objs[7]]),
("value__bar__in", [["foo", "bar"], ["a"]], [self.objs[7]]),
("value__bax__in", [{"foo": "bar"}, {"a": "b"}], [self.objs[7]]),
("value__h__in", [True, "foo"], [self.objs[4]]),