diff options
| -rw-r--r-- | django/db/models/fields/json.py | 7 | ||||
| -rw-r--r-- | tests/model_fields/test_jsonfield.py | 1 |
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]]), |
