我想问你是否可以解释一下Openerp域过滤器的剖析。我必须使用它我的项目。请解释以下域筛选器的说明。
['|',('order_id.user_id','=',user.id),('order_id.user_id','=',False)]
我想知道(order_id.user_id','=',user.id)
的确切含义,什么是order_id
、user_id
和user.id
。他们是否引用任何表。如果是,那么我怎么知道是哪一个...
基本上,我想知道自下而上破译符号,以便可以根据我的要求使用它。
很简单。
考虑以下字段(只有我在这里给出的XML,你必须管理的python(
<field name="a"/>
<field name="b"/>
<field name="c"/>
单一条件
考虑编程中的一些简单条件
if a = 5 # where a is the variable and 5 is the value
在Open ERP域过滤器中,它将以这种方式编写
[('a','=',5)] # where a should be a field in the model and 5 will be the value
所以我们推导出的语法是
('field_name', 'operator', value)
现在让我们尝试应用另一个字段来代替静态值 5
[('a','=',b)] # where a and b should be the fields in the model
在上面,您必须注意第一个变量 a 用单引号括起来,而值 b 则不是。要比较的变量将始终排在第一位,并用单引号括起来,值将只是字段名称。但是,如果您想将变量 a 与值"b"进行比较,则必须执行以下操作
[('a','=','b')] # where only a is the field name and b is the value (field b's value will not be taken for comparison in this case)
条件和
在编程中
if a = 5 and b = 10
在开放式 ERP 域筛选器中
[('a','=',5),('b','=',10)]
请注意,如果在开始时未指定任何条件,则将应用条件。如果要替换静态值,只需删除 5 并给出字段名称(严格不带引号(
[('a','=',c),('b','=',c)]
条件或
在编程中
if a = 5 or b = 10
在开放式 ERP 域筛选器中
['|',('a','=',5),('b','=',10)]
请注意,, 表示它是 和 条件。如果要替换字段,只需删除 5 并给出字段名称(严格不要引号(
多种条件
在编程中
if a = 5 or (b != 10 and c = 12)
在开放式 ERP 域筛选器中
['|',('a','=',5),('&',('b','!=',10),('c','=',12))]
此外,Arya 的这篇文章将对您有很大帮助。干杯!!
"|"是应用于下一个比较的 OR。 (..., '=', False( 被转换为 IS NULL,因此用于此的 SQL 将是
WHERE order_id.user_id = x OR order_id.user_id is NULL
默认值为 AND,这就是为什么您看不到 ('&', ('field1', '=' ,1(, ('field2' ,'=', 2( 的原因。
请注意,另一个有用的是('field1', '!=', False(,它被转换为 其中 field1 不为 null
没有很多很好的文档,并且对于多个运算符,它们变得非常棘手,因为您必须反向使用运算符来完成元组。 我发现我很少使用复杂的查询,以至于我只是在 Postgres 中打开查询日志记录并使用反复试验来观察生成的查询,直到我正确为止。