Support clause on multiselection field with operator in and value None

Closes #14520
(grafted from 7a8606077f4c574566fe75d8b74573b31c934980)

--HG--
branch : 7.0
This commit is contained in:
Cédric Krier
2026-01-19 16:40:01 +01:00
parent b2bb8ec2d4
commit f044fefef5
2 changed files with 29 additions and 1 deletions
@@ -91,7 +91,9 @@ class MultiSelection(SelectionMixin, Field):
database = Transaction().database
table, _ = tables[None]
raw_column = self.sql_column(table)
if isinstance(value, str):
if value is None:
expression = Literal(False)
elif isinstance(value, str):
try:
expression = database.json_key_exists(raw_column, value)
except NotImplementedError:
@@ -231,6 +231,32 @@ class FieldMultiSelectionTestCase(unittest.TestCase):
self.assertEqual(selections, [selection])
@with_transaction()
def test_search_in_none(self):
"Test search selection in None"
Selection = Pool().get('test.multi_selection')
selection, = Selection.create([{
'selects': ['foo', 'bar'],
}])
result = Selection.search([
('selects', 'in', None),
])
self.assertEqual(result, [])
@with_transaction()
def test_search_not_in_none(self):
"Test search selection not in None"
Selection = Pool().get('test.multi_selection')
selection, = Selection.create([{
'selects': ['foo', 'bar'],
}])
result = Selection.search([
('selects', 'not in', None),
])
self.assertEqual(result, [selection])
@with_transaction()
def test_search_in_string(self):
"Test search selection in string"