大家好,
我们今天主要来介绍一下odoo 中的 Domian 。
什么是Domain ? 简单的说就是一种条件语句,用来过滤您的数据。这些条件,通过使用Polish Notation(波兰表达式) 来定义。
比如:
<u>正 常 表 达 :</u> ((A AND B) OR C ) OR (D AND E)<u>波兰表达式:</u> ['|', '|', '&', A, B, C, '&', D, E]
解释:
从外面的运算符开始,将它移动到最前面
((A AND B) OR C ) <u>OR</u> (D AND E) => <u>OR</u> ((A AND B) OR C ) (D AND E)
注意:下划线的为移动的运算符
重复步骤一,直到所有运算符都移动至最左侧
OR ((A AND B) <u>OR</u> C ) (D AND E) => OR <u>OR </u>((A AND B) C ) (D AND E)OR OR ((A <u>AND</u> B) C ) (D AND E) => OR OR <u>AND</u> ((A B) C ) (D AND E)OR OR AND ((A B) C ) (D <u>AND</u> E) => OR OR AND ((A B) C ) <u>AND</u> (D E)
去除所有的括号
<field name="lot_id" domain="['|', '&', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('on_work_order_id', '=', id)]" groups="stock.group_production_lot"/>
注意: 在写xml 的时候,要用
'&'
代替 ‘&’
判断运算 : ! (否), | (或), & (与)
条件运算: '=', '!=', '<=', '<', '>', '>=', '=?', '=like', '=ilike', 'like', 'not like', 'ilike', 'not ilike', 'in', 'not in', 'child_of'
实例:[输入]输入:记录 1: Openerphk记录 2: openerphk记录 3: Opensource记录 4: opensource记录 5: Open记录 6: openh记录 7: Odoohk记录 8: odoohk记录 9: Odooopenerphk记录 10: OdooOpenerphk
'like': [('input', 'like', 'open')] - 返回区分大小写的 (通配符 - '%open%') 搜索的结果.O/p: open, opensource, openerphk, Odooopenerphk
'not like': [('input', 'not like', 'open')] - 然后结果与大小写敏感不匹配(通配符 - '%open%') 搜索的结果.O/p: Openerphk, Opensource, Open, Odoohk, odoohk, OdooOpenerphk
**'=like': **[('name', '=like', 'open')] - 返回恰好是 (= 'open') 大小写敏感搜索的结果.O/p: open
'ilike': [('name', 'ilike', 'open')] - 返回恰好是(通配符 - '%open%') 大小写不敏感的搜索结果.O/p: Openerphk, openerphk, Opensource, opensource, Open, open, Odooopenerphk, OdooOpenerphk
'not ilike': [('name', 'not ilike', 'open')] - 返回结果与大小写敏感不匹配 (通配符 - '%open%') 的搜索结果.O/p: Odoohk, odoohk
'=ilike': [('name', '=ilike', 'open')] - 返回结果恰巧是 (= 'open' or 'Open') 大小写不敏感的搜索结果.O/p: Open, open
**'=?':**name = 'odoo' parent_id = False [('name', 'like', name), ('parent_id', '=?', parent_id)] - 返回名称域结果 & Truename = 'odoo' parent_id = 'openerp' [('name', 'like', name), ('parent_id', '=?', parent_id)] - 返回名称域结果 & parent_id 域结果'=?' 是一个捷径术语,只要右侧为None 或者False ,结果就是TRUE。'=?' 在一些情况类似 '='
'in': [('value1', 'in', ['value1', 'value2'])] - 此运算符会检查 value1 是否在右侧的列中出现.
'not in': [('value1', 'not in', ['value2'])] - 操作符将检查value1在右项列表中是否不存在;
*** “in”和“not in”需要使用值列表/元组, '=' 和 '!=' 可以应用于字符串
'=': value = 10 [('value','=',value)]
'!=': value = 15 [('value','!=',value)]
'child_of': parent_id = '1' #Agrolait 'child_of': [('partner_id', 'child_of', parent_id)] - 返回给与的parent_id中partner_id左右列表
'<=', '<', '>', '>=': 这些运算符主要用于比较日期。-[('date', '>=', date_begin), ('date', '<=', date_end)].
当然,您也可以比较 int 或者 float .