Domain 表示式的用法

2022-08-19 02:12:17 字數 2348 閱讀 4727

什麼是domain

[('create_uid','=',user.id)]
domain是個多條件的列表,每個條件是乙個三元表示式:[(欄位名,操作符,值), (欄位名,操作符,值)]

domain使用場合

欄位名當前模型的字段或者是通過點操作符訪問當前模型的many2one / many2many物件。如果左邊是many2many物件的時候,則表示左邊只要任意乙個值符合條件則符合條件。

操作符名稱

說明=,!=,>,>=,<,<=

比較運算,等於,不等於,大於,大於等於,小於,小於等於

like

模糊匹配,可以使用萬用字元,下劃線「_」匹配乙個字元,百分號「%」匹配零或者多個字元

ilike

類似like,不區分大小寫

not like

模糊不匹配的

in包含,判斷值是否在元素的列表裡面

not in

不包含,判斷值是否不在元素的列表裡面

child_of

判斷是否value的子記錄,通過_parent_name實現,不太理解

parent_left

???parent_right

???注意如果需要在xml使用domain,大於,小於因為和標籤符號一樣所以需要轉義,大於>,小於<

值值進行篩選的變數,必須能通過操作符來和字段進行比較。

多條件的邏輯運算

['&', ('partner_id.coutnry_id.code', '=', 'cn'), ('partner_id.coutry_id.code', '=', 'us')]
odoo是使用了波蘭表示法,簡單來說,波蘭表示法是一種操作符置於運算元前,並且不需要括號仍然能無歧義地解析表達的方法。

波蘭表示法的運算順序

以二元運算為例,從左至右讀入表示式,遇到乙個操作符後跟隨兩個運算元時,則計算之,然後將結果作為運算元替換這個操作符和兩個運算元;重複此步驟,直至所有操作符處理完畢。

舉個栗子

['|','&','|',a,b,c,'&',d,e]
其中a,b,c,e,f,g分別是不帶邏輯運算子的表示式,表示式的運算順序:

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

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

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

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

[(((a | b) | c) | (d & e))]

邏輯運算子包括

符號說明

丨(or)

或,二元運算

&(and)

與,二元運算

!(no)

非,單目運算

邏輯運算子預設是'與',『與』運算子可以不寫。

例項

「名字為 abc」,就是乙個最簡單的單條件domain。

[('name','=','abc')]
「名字為 abc 而且 語言編碼不為en_us」,domain裡條件預設邏輯關係就是and,所以如下。

[('name','=','abc'),

('language.code','!=','en_us')]

「名字為 abc 而且語言編碼不為 en_us 而且國家的編碼為 be 或者 de」。

[('name','=','abc'),

('language.code','!=','en_us'),

'|',('country_id.code','=','be'),

('country_id.code','=','de')]

如果我們要做到這個效果

a and (b or c) and d and e

先從裡面開始,把or提前

a and (or b c) and d and e

把裡面的and提前,去掉括號

and a or b c and d e

所以最後的domain可以這樣寫

a, '|', b, c, d, e

當然了,我們為什麼不寫得讓自己也容易看一點呢,如下:

a, d, e, '|', b, c

odoo 12 域表示式(domain)

格式 欄位名 操作符 值 例 shenqr.user id uid 1 操作符 操作符說明 比較運算,等於,不等於,大於,大於等於,小於,小於等於 like 模糊匹配,通過 value 匹配 like 可以使用模式匹配,下劃線 匹配乙個字元,百分號 匹配零或者多個字元 ilike 類似like,但是...

odoo裡domain條件表示式寫法總結

自己做了個例子 倉庫 儀表板 分揀型別 使用者倉庫1只能看到即墨庫的 使用者2只能看到青島的 設定 使用者組 仿照 倉庫 使用者 組新建乙個使用者組 在模組倉庫下 名稱叫即墨庫管 在繼承選項卡中選中 倉庫 使用者 然後建立兩個使用者 倉庫1隸屬於即墨庫管 倉庫2隸屬於青島庫管 設定 安全設定 記錄規...

Lambda表示式的用法

1 函式式程式設計思想概述 在數學中,函式就是有輸入量 輸出量的一套計算方案,也就是 拿什麼東西做什麼事情 相對而言,物件導向過分強調 必須通過物件的形式來做事情 而函式式思想則盡量忽略物件導向的複雜語法 強調做什麼,而不是以什麼形式做。2 lambda標準格式 lambda省去物件導向的條條框框,...