Я считаю этот ответ очень полезным для сложной области. { ссылка }
В соответствии с этим ответом вы можете использовать odoo.osv.expression
.
In [6]: from odoo.osv.expression import AND,OR
In [7]: a,b,c,d,e,f,g,h = ([("field_" + x, "=", "value_" + x)] for x in "ABCDEFGH")
In [8]: OR([OR([AND([a,b]),AND([c,d])]),OR([AND([e,f]),AND([g,h])])])
Out[8]:
['|',
'|',
'&',
('field_A', '=', 'value_A'),
('field_B', '=', 'value_B'),
'&',
('field_C', '=', 'value_C'),
('field_D', '=', 'value_D'),
'|',
'&',
('field_E', '=', 'value_E'),
('field_F', '=', 'value_F'),
'&',
('field_G', '=', 'value_G'),
('field_H', '=', 'value_H')]