了解OpenERP域名过滤器?

时间:2013-09-25 07:36:24

标签: odoo

我想问你是否可以解释Openerp域过滤器的解剖结构。我必须使用它我的项目。 请解释以下域过滤器的说明。

['|',('order_id.user_id','=',user.id),('order_id.user_id','=',False)]

我想知道(order_id.user_id','=',user.id)的确切含义,order_iduser_iduser.id。他们是否引用任何表格。如果是,那我怎么知道哪一个......

基本上我想知道从下到上解读符号,以便按照我的要求使用它。

2 个答案:

答案 0 :(得分:20)

这个很简单。

考虑以下字段(我只在这里给出了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

在Open ERP域过滤器中

[('a','=',5),('b','=',10)]

请注意,如果您未在开头指定任何条件,则将应用条件。如果要替换静态值,只需删除5并输入字段名称(严格不带引号

[('a','=',c),('b','=',c)]

条件或

编程

if a = 5 or b = 10

在Open ERP域过滤器中

['|',('a','=',5),('b','=',10)]

请注意,表示它是条件。如果您要替换字段,只需删除5并输入字段名称(严格不带引号

多个条件

编程

if a = 5 or (b != 10 and c = 12)

在Open ERP域过滤器中

['|',('a','=',5),('&',('b','!=',10),('c','=',12))]

此外,来自Arya的post对您有很大帮助。干杯!!

答案 1 :(得分:3)

'|'是一个应用于下一个比较的OR。 (...,'=',False)被转换为IS NULL,因此这个SQL将是

WHERE order_id.user_id = x OR order_id.user_id is NULL

默认为AND,这就是为什么你到处都看不到('&amp;',('field1','=',1),('field2','=',2)。

注意另一个有用的是('field1','!=',False),它被转换为WHERE field1 IS NOT NULL

没有很多很好的文档可供使用,因为你必须通过反向使用运算符来处理元组,因此它们对于多个运算符来说非常棘手。我发现我很少使用复杂的,我只是打开Postgres中的查询记录,并使用反复试验来观察生成的查询,直到我做对了。