summaryrefslogtreecommitdiff
path: root/tests/model_fields
diff options
context:
space:
mode:
authorClifford Gama <cliffygamy@gmail.com>2025-10-30 20:59:15 +0200
committerJacob Walls <jacobtylerwalls@gmail.com>2025-12-10 17:45:51 -0500
commit66fed37ecb78daf0a50e95151a752b5760293514 (patch)
tree5a83bb79028cdc23c390e4a1db38c684dd4ebdea /tests/model_fields
parentbbabbac936caf6db129427e6e65f03b6d0a68f62 (diff)
Fixed #36689 -- Fixed top-level JSONField __in lookup failures on MySQL and Oracle.
Added a JSONIn lookup to handle correct serialization and extraction for JSONField top-level __in queries on backends without native JSON support. KeyTransformIn now subclasses JSONIn. Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com> Thanks Jacob Walls for the report and review.
Diffstat (limited to 'tests/model_fields')
-rw-r--r--tests/model_fields/test_jsonfield.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py
index cf8e1888e5..cd3cad734e 100644
--- a/tests/model_fields/test_jsonfield.py
+++ b/tests/model_fields/test_jsonfield.py
@@ -1010,6 +1010,19 @@ class TestQuerying(TestCase):
NullableJSONModel.objects.filter(value__foo__iexact='"BaR"').exists(), False
)
+ def test_in(self):
+ tests = [
+ ([[]], [self.objs[1]]),
+ ([{}], [self.objs[2]]),
+ ([{"a": "b", "c": 14}], [self.objs[3]]),
+ ([[1, [2]]], [self.objs[5]]),
+ ]
+ for lookup_value, expected in tests:
+ with self.subTest(value__in=lookup_value):
+ self.assertCountEqual(
+ NullableJSONModel.objects.filter(value__in=lookup_value), expected
+ )
+
def test_key_in(self):
tests = [
("value__c__in", [14], self.objs[3:5]),
@@ -1297,6 +1310,13 @@ class JSONNullTests(TestCase):
NullableJSONModel.objects.filter(value__isnull=True), [sql_null]
)
+ def test_filter_in(self):
+ obj = NullableJSONModel.objects.create(value=JSONNull())
+ self.assertSequenceEqual(
+ NullableJSONModel.objects.filter(value__in=[JSONNull()]),
+ [obj],
+ )
+
def test_bulk_update(self):
obj1 = NullableJSONModel.objects.create(value={"k": "1st"})
obj2 = NullableJSONModel.objects.create(value={"k": "2nd"})