了解OpenERP域过滤器



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

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

我想知道(order_id.user_id','=',user.id)的确切含义,什么是order_iduser_iduser.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 中打开查询日志记录并使用反复试验来观察生成的查询,直到我正确为止。

最新更新