问题描述
我无法理解创建带有多个和/或子句的条件的逻辑,我要复制的域是:
(Field1=A or Field2=B) AND Field3=C and Field4!=D
在我的搜索视图中,在我尝试过的域上:
domain="[(('&',('field4','!=',False),('Field3','=',False)),('|',('Field1','ilike','X'),('Field2','Y')))]"
domain="[(''&'',('&','Y')))]"
尝试过滤器时出现此错误:
in distribute_not
elif token in DOMAIN_OPERATORS_NEGATION:
TypeError: unhashable type: 'list'
有人可以向我解释在域中使用不同运算符建立多重条件的正确逻辑吗?
解决方法
通过此链接,我了解了它的工作原理:
Understanding OpenERP Domain Filter?
在我的情况下,正确的域是:
domain="['&',('Field4','!=',False),('Field3','=','|',('Field1','ilike','X'),('Field2','Y')]"
,
ODOO域跟随前缀表达式。您可以生成自己的域名条件来了解它,或者
从odoo.osv导入表达式
并使用expression.AND(list_of_conditions)
和expression.OR(list_of_conditions)
来生成您的域。
在您的情况下(Field1 = A或Field2 = B)AND Field3 = C和Field4!= D,这可以称为(conditionA OR conditionB)AND conditionC AND conditionD。所以表达式将是
expression.AND([expression.OR([conditionA,conditionB]),conditionC, conditionD])