1. 程式人生 > 其它 >odoo開發教程九:Odoo10 API

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