Odoo Domain條件表示式寫法總結

weixin_33907511發表於2017-02-14

1、Domain條件表示式規則

最簡單的格式:[('欄位','操作符',值)]
例:[('shenqr.user_id','=',uid)]
說明:domain中的單個條件是一個由三個元素組成的元組,所以務必加上()。元組中第一個引數是物件的欄位名column;元組中的第二個引數是比較運算子=,!=,>,>=,<,<=,like,ilike,in,not in,child_of,parent_left,parent_right;元組中第三個就是用來比較的值了。多個條件用|(or),&(and),!(no)邏輯運算子連結。邏輯運算子作為字首放置於條件前面。|&必須兩個條件連結,!對一個條件取反。預設邏輯運算子為&
注意:在xml檔案中使用時,&要用&表示,>=要用>&表示,<=要用<&表示,!=最好用><表示。

2、不帶邏輯運算子的簡單表示式

過濾狀態為待批:[('state','=','wait_prove')]
過濾狀態為草稿、待批:[('state','in',('draft','wait_prove'))]或者[('state','in',['draft','wait_prove'])]
過濾請假天數大於3天:[('tians','>',3)]

3、帶邏輯運算子的簡單表示式

假設a,b分別是不帶邏輯運算子的簡單表示式:
a=('state','><','draft')
b=('tians','<=',1)
a and b:[a,b] 或 ['&',a,b]
a or b:['|',a,b]
Eg:請假模組,副經理登入時待審批的請假單(狀態是待批,並且請假天數在一天以內)選單過濾條件:[('state','=','wait_prove'),('tians','<=',1)]

4、帶邏輯運算子的稍複雜的表示式

同上,假設a,b,c分別是不帶邏輯運算子的簡單表示式
a and b and c:[a,b,c] 或則 ['&','&',a,b,c]
a or b or c:['|','|',a,b,c]
a and b or c:['|','&',a,b,c]
a and (b or c):['&',a,'|',b,c]
Eg:經理待審批的請假單(狀態是待批,並且請假天數大於一天,並且是本部門的職員請假單,並且還不包含自己的請假單)選單過濾條件
[('state','=','wait_prove'),('tians','>',1),('shenqr.user_id','<>',uid),('shenqr.department_id','=',department_id),('shenqr.user_id.groups_id','=',59)]

5、帶邏輯運算子的更復雜的表示式

同上,假設a,b,c,e,f,g分別是不帶邏輯運算子的簡單表示式。
(a or b and c) or (d and e) : ['|','&','|',a,b,c,'&',d,e)]
Eg:總經理待審批的請假單(所有部門副經理或經理狀態為待批的請假單,或3天以上部門經理批准過的請假單)選單過濾條件:
['|','&','|',('shenqr.user_id.groups_id','=',60),('shenqr.user_id.groups_id','=',61),('state','=','wait_prove'),'&',('state','=','depmanager_proved'),('tians','>',3)]

(a or b and c) or (d and e) or (f and g)
['|','|','&','|',a,b,c,'&',d,e,'&',f,g]
Eg:總經理全部的請假單(所有部門副經理或經理狀態為待批的請假單,或3天以上部門經理批准過的請假單,或3天以上狀態為同意或駁回的請假單據)選單過濾條件:
['|','|','&','|',('shenqr.user_id.groups_id','=',60),('shenqr.user_id.groups_id','=',61),('state','=','wait_prove'),'&',('state','=','depmanager_proved'),('tians','>',3),'&',('state','in',['proved','rejected']),('tians','>',3)]

相關文章