odoo 中的 domian 和 運算子

2021-09-19 21:14:22 字數 3373 閱讀 4714

我們今天主要來介紹一下odoo 中的 domian 。

什麼是domain ? 簡單的說就是一種條件語句,用來過濾您的資料。這些條件,通過使用polish notation(波蘭表示式) 來定義。

比如:

正 常 表 達 :

((a and b) or c ) or (d and e)

波蘭表示式:

['|', '|', '&', a, b, c, '&', d, e]

解釋:

步驟一:

從外面的運算子開始,將它移動到最前面

((a and b) or c ) or (d and e) => or ((a and b) or c ) (d and e)

注意:下劃線的為移動的運算子

步驟二:

重複步驟一,直到所有運算子都移動至最左側

or ((a and b) or c ) (d and e) => or or ((a and b) c ) (d and e)

or or ((a and b) c ) (d and e) => or or and ((a b) c ) (d and e)

or or and ((a b) c ) (d and e) => or or and ((a b) c ) and (d e)

步驟三:

去除所有的括號

最後,讓我們將表示式寫入xml 檔案

注意: 在寫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 .

Odoo中的嚮導

嚮導類似於彈窗,用於接收使用者的輸入,然後作出相應的處理。class xxwizard models.transientmodel 要點1 使用瞬態模型 name xx.wizard order id asc 字段 fields.型別 u 欄位名 要點2 這些欄位在彈窗中由使用者賦值 api.mod...

odoo中self的使用

一 self是什麼 目前新版的odoo中使用到的self,是對 游標cr 使用者id 模型 上下文 記錄集 快取 的封裝。我們可以通過 self.xx 獲取到這些封裝的東西,比如 self.cr self.uid。二 通過直接設定屬性來改變資料庫中字段值 我們在查出某模型的記錄後,可以通過 reco...

Odoo中的JS繼承機制

odoo中js的繼承有什麼用?odoo中有相當多的檢視,掛件等元件,在產品擁有個性化定製需求的時候,我們要修改某些widgets或者classes,那麼就需要理解odoo中前端框架的js架構,並且掌握繼承js的方法。js繼承方法 var new class demo class.extend 使用e...