你們好,dom
咱們今天主要來介紹一下odoo 中的 Domian 。oop
什麼是Domain ? 簡單的說就是一種條件語句,用來過濾您的數據。這些條件,經過使用Polish Notation(波蘭表達式) 來定義。code
好比:xml
<u>正 常 表 達 :</u> ((A AND B) OR C ) OR (D AND E) <u>波蘭表達式:</u> ['|', '|', '&', A, B, C, '&', D, E]blog
解釋:字符串
步驟一:input
從外面的運算符開始,將它移動到最前面it
((A AND B) OR C ) <u>OR</u> (D AND E) => <u>OR</u> ((A AND B) OR C ) (D AND E)io
注意:下劃線的爲移動的運算符class
步驟二:
重複步驟一,直到全部運算符都移動至最左側
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)
步驟三:
去除全部的括號
最後,讓咱們將表達式寫入xml 文件
<field name="lot_id" domain="['|', '&', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('on_work_order_id', '=', id)]" groups="stock.group_production_lot"/>
注意: 在寫xml 的時候,要用
'&'
代替 ‘&’
接下來, 咱們須要說說odoo中的 domain 運算符:
判斷運算 : ! (否), | (或), & (與)
條件運算: '=', '!=', '<=', '<', '>', '>=', '=?', '=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)] - 返回名稱域結果 & True name = '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 .