带OR和and逻辑的Odoo12域条件

带OR和and逻辑的Odoo12域条件,odoo,odoo-12,Odoo,Odoo 12,我无法理解使用multiple and/or子句创建条件的逻辑,我要复制的域是: (Field1=A或Field2=B)和Field3=C以及Field4=D 在我的搜索视图中,在我尝试的字段域上: domain="[(('&',('field4','!=',False),('Field3','=',False)),('|',('Field1','ilike','X'),('Field2','ilike','Y')))]" domain="[(''

我无法理解使用multiple and/or子句创建条件的逻辑,我要复制的域是:

(Field1=A或Field2=B)和Field3=C以及Field4=D

在我的搜索视图中,在我尝试的字段域上:

domain="[(('&',('field4','!=',False),('Field3','=',False)),('|',('Field1','ilike','X'),('Field2','ilike','Y')))]"

domain="[(''&'',('&',('field4','!=',False),('Field3','=',False)),('|',('Field1','ilike','X'),('Field2','ilike','Y')))]"
当我尝试过滤器时,我发现以下错误:

 in distribute_not
    elif token in DOMAIN_OPERATORS_NEGATION:
TypeError: unhashable type: 'list'

有人可以向我解释在域中使用不同运算符构建多个条件的正确逻辑吗?

通过以下链接,我了解了它的工作原理:

在我的情况下,正确的域是:

domain="['&',('Field4','!=',False),('Field3','=',False),'|',('Field1','ilike','X'),('Field2','ilike','Y')]"

ODOO域遵循前缀表达式。您可以生成自己的域条件,或者

从odoo.osv导入表达式

并使用
expression.and(条件列表)
expression.OR(条件列表)
生成域

在您的案例中(Field1=A或Field2=B),Field3=C和Field4=D、 这可以称为(条件A或条件B)和条件C和条件D。因此,表达式将是

表达式和([表达式]或([条件A,条件B]),条件C, (d)


谢谢你,奥马尔,我不知道第二个选择。