我想问你是否可以解释Openerp域过滤器的解剖结构.我必须使用它我的项目.请解释以下域过滤器的说明.
['|',('order_id.user_id','=',user.id),('order_id.user_id','=',False)]
Run Code Online (Sandbox Code Playgroud)
我想知道的确切含义(order_id.user_id','=',user.id)是什么order_id,user_id和user.id.他们是否引用任何表格.如果是,那么我该怎么知道哪一个......
基本上我想知道从下到上解读符号,以便可以按照我的要求使用它.
Viv*_*vek 20
这个很简单.
考虑以下字段(这里只提供XML,你需要管理的python)
<field name="a"/>
<field name="b"/>
<field name="c"/>
Run Code Online (Sandbox Code Playgroud)
单一条件
考虑编程中的一些简单条件
if a = 5 # where a is the variable and 5 is the value
Run Code Online (Sandbox Code Playgroud)
在Open ERP域过滤器中,它将以这种方式编写
[('a','=',5)] # where a should be a field in the model and 5 will be the value
Run Code Online (Sandbox Code Playgroud)
所以我们得到的语法是
('field_name', 'operator', value)
Run Code Online (Sandbox Code Playgroud)
现在让我们尝试应用另一个字段来代替静态值5
[('a','=',b)] # where a and b should be the fields in the model
Run Code Online (Sandbox Code Playgroud)
在上面你要注意的是,第一个变量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)
Run Code Online (Sandbox Code Playgroud)
条件和
在编程中
if a = 5 and b = 10
Run Code Online (Sandbox Code Playgroud)
在Open ERP域过滤器中
[('a','=',5),('b','=',10)]
Run Code Online (Sandbox Code Playgroud)
请注意,如果你没有在一开始指定的任何条件和情况将被应用.如果要替换静态值,只需删除5并给出字段名称(严格没有引号)
[('a','=',c),('b','=',c)]
Run Code Online (Sandbox Code Playgroud)
条件OR
在编程中
if a = 5 or b = 10
Run Code Online (Sandbox Code Playgroud)
在Open ERP域过滤器中
['|',('a','=',5),('b','=',10)]
Run Code Online (Sandbox Code Playgroud)
请注意,表示它和条件.如果你想替换字段,你可以简单地删除5并给出字段名称(严格没有引号)
多个条件
在编程中
if a = 5 or (b != 10 and c = 12)
Run Code Online (Sandbox Code Playgroud)
在Open ERP域过滤器中
['|',('a','=',5),('&',('b','!=',10),('c','=',12))]
Run Code Online (Sandbox Code Playgroud)
来自Arya的这篇文章也将对你有很大帮助.干杯!!
'|' 是应用于下一个比较的 OR。(..., '=', False) 被转换为 IS NULL,因此 SQL 为
WHERE order_id.user_id = x OR order_id.user_id is NULL
Run Code Online (Sandbox Code Playgroud)
默认值为 AND,这就是为什么您不会到处看到 ('&', ('field1', '=' ,1), ('field2' ,'=', 2) 的原因。
请注意,另一个有用的函数是 ('field1', '!=', False) ,它会转换为 WHERE field1 IS NOT NULL
这方面没有很多很好的文档,而且对于多个运算符来说它们会变得非常棘手,因为您必须通过反向使用运算符来处理元组。我发现我很少使用复杂的查询,因此我只需在 Postgres 中打开查询日志记录,并通过试验和错误观察生成的查询,直到得到正确的结果。
| 归档时间: |
|
| 查看次数: |
11602 次 |
| 最近记录: |