轉載請注明原文地址:https://www.cnblogs.com/ygj0930/p/10826127.html
一:domain表達式
domain表達式:通常用來篩選數據記錄。它們使用特殊的語法,以便於Odoo ORM 將它們解析后生成對應的SQL WHERE數據庫篩選語句。
二:domain的寫法
domain表達式是一個條件列表,每個條件是一個形如('field_name', 'operator', value')的元組。
filed_name 是需要篩選的字段,它可以使用點(.)來訪問關系模塊的字段。 value 是一個Python表達式的值。它可以使用字符值,比如:字符串,數字,布爾值,或則列表、某個字段、用戶在context中自定義的有效的值。 operator 可以為: 常用的操作符:<,>,<=,>=,=,!=。 '=like'通配符,使用下划線(_)時,匹配一個任意字符,使用百分號(%)時,匹配多個字符。 'like'匹配一個’%value%’的字符串。’ilike’與此類似但不區分大小寫。‘not like’和‘not ilike’也可以使用 'child of'在層級關系中,篩選子集 'in'和’not in’篩選是否在一個列表里面,所以,給的值應該是個list。當在’to-many’的關系字段中,‘in’的作用和contains的作用一樣
domain表達式是一個包含多項內容的list,因此,可以包含多個條件表達式元組。 默認情況下這些條件之間是用AND邏輯符連接的,也就是說,它只返回滿足所有條件的記錄集。
也可以用顯式的邏輯連接符:and連接符(&,默認使用),或連接符(|)。這些連接符后面跟着兩項內容,可以畫成遞歸樹的形式理解。
感嘆號(!),是非操作符(NOT),作用於緊挨它的后一個項。因此,它應該出現在否定項的前面。比如,['!', ('is_done','=',True)]
例子:
['|', ('message_follower_ids', 'in', [user.partner_id.id]), '|', ('user_id', '=', user.id), ('user_id', '=', False)]
畫成遞歸樹解讀: