odoo開發教程九:Odoo10 API
一:紀錄集API
model中的資料是以集合的形式使用的,因此可以使用集合運算來操作。
-
集合運算子
- record in set返回record是否在set中,record須為單條記錄,record not in set反之
- set1 <= set2 返回set1是否為set2的子集
- set1 >= set2 返回set2是否為set1的子集
- set1 | set2 返回set1和set2的並集
- set1 & set2 返回set1和set2的交集
- set1 - set2 返回在集合set1中但不在set2中的記錄
集合運算API:
- ids 得到當前記錄集合的id列表
- ensure_one() 驗證一個記錄集合是否只包含一條記錄
- exists() 返回當前記錄集中真正存在的子集,並把快取中未刪除的部分做標記,可用於判斷
if record.exists():
- filtered(func) 返回滿足func引數內條件的記錄集合,引數可以是一個函式或者用.分隔的欄位列表
- sorted(key=None, reverse=False) 返回按key排序之後的記錄集,key引數可以是一個返回單個key的函式或欄位名稱或為空,reverse引數為True時即為倒序
- mapped(func) 將func函式應用到所有記錄上,並返回記錄列表或集合
二:執行環境API
執行環境儲存了很多ORM相關的變數:資料庫查詢遊標、當前使用者、元資料,還存有快取,可使用env
records.env.user
records.env.cr
records.env.context
更改執行環境:
- sudo() 使用現有資料集建立一個新執行環境,得到一個基於新執行環境的資料集的拷貝
env['res.partner'].sudo().create({'name': "A Partner"})
- with_context()
一個引數時可用於替換當前執行環境的context,多個引數時通過keyword新增到當前執行環境context或單引數時設定的context - with_env() 完整替換當前執行環境
三:ORM API
search() 接收domain表示式引數,返回符合條件的資料集合,可以通過limit,offset引數返回一個子集,還可通過order引數對資料排序。
self.search([('is_company', '=', True), ('customer', '=', True)])
search_count():統計滿足條件的資料數量
create() 接收多個欄位、值的組合,返回新建立的資料集:
self.create({'name': "New Name"})
write() 接收多個欄位、值組合,會對指定資料集的所有記錄進行修改,不返回:
self.write({'name': "Newer Name"})
browse() 根據資料的id或者一組id來查詢,返回符合條件的資料集合:
self.browse([7, 18, 12])
exists() 得到某個資料集中保留在資料庫中的那部分(可用於檢查資料集是否為空):
if not record.exists(): raise Exception("The record has been deleted")
ref() 執行環境函式,根據提供的外部id返回對應的資料記錄:
env.ref('base.group_public')
ensure_one() 檢驗某資料集是否只包含單條資料,如果不是則報錯:
records.ensure_one()
四:搜尋函式
-
search(args[, offset=0][, limit=None][, order=None][, count=False])
根據args引數裡的domain表示式來搜尋所有記錄,引數列表:
1.args:domain表示式,為空時返回所有記錄
2.offset (int) 從第幾條記錄開始取
3.limit (int) 返回記錄行數的最大值
4.order (str) 排序的欄位
5.count (bool) 當值為True的時候只返回匹配記錄的條數 -
search_count(args)
返回根據給定domain表示式引數查詢所得到的記錄條數 -
name_search(name='', args=, operator='', limit=)
返回根據name條件來查詢,並滿足args指定的domain表示式的記錄集合 -
name (str) -- 用來匹配的name字串 args (list) -- domain表示式列表 operator (str) -- 用來匹配的操作符,如: 'like' , '='. limit (int) -- 可選引數,最多返回的記錄行數
五:欄位或檢視查詢
欄位查詢:
fields_get([fields][, attributes]) 以資料字典的形式返回欄位的定義,通過繼承得來的欄位也會在其中,string/help/selection屬性會自動被翻譯 fields引數是欄位列表、為空或不傳返回所有欄位 attributes 可指定欄位的屬性、為空或不傳時返回全部的
檢視查詢:
fields_view_get([view_id | view_type='']) 返回指定檢視的具體組成如:欄位,模型,檢視結構 引數列表: view_id 檢視的id或None view_type 當view_id引數為空時指定檢視型別如form,tree等 toolbar 引數為true時將上下文動作包含在內
default_get(fields) 獲取指定欄位的預設值
name_get() 以列表形式返回每條記錄的描述,預設是display_name欄位
name_create(name) 相當於呼叫create方法建立一條新記錄而只設置一個display_name