<rt id="umcai"><optgroup id="umcai"></optgroup></rt>
<tr id="umcai"><small id="umcai"></small></tr><rt id="umcai"><small id="umcai"></small></rt>
<acronym id="umcai"><small id="umcai"></small></acronym>

Odoo Shell

Odoo shell 提供了一個簡便的操作 Odoo的交互界面, odoo 9.0 開始就是標準功能, 無需安裝第三方應用。

? ?

本文基于Odoo10 說明 Odoo Shell以及 Odoo ModelClass 、Model、model、recordset 之間的關系 [注意:大小寫是有特殊含義]

? ?

Odoo Shell 通過在 cli/command.py#commands{} 注冊 Shell command 來實現的。

首先,Odoo支持的 command 都是基于 command 基類,而 command 基類 則通過 它的 元類 初始化的時候, commands{} 注冊支持的 command.

? ?

? ?

? ?

Shell command.

? ?

? ?

而從 Odoo 10 開始, Shell 支持 多種 終端,通過參數shell-interface 傳遞給Odoo shell,支持以下終端類型

  1. ipython
  2. ptpython
  3. bpython
  4. python,如果不指定,則使用Python

? ?

運行 Odoo shell

執行 命令 python odoo-bin shell -c ..\t.conf --shell-interface ipython

ipython 交互界面 運行 Odoo shell. 啟動之后

出現 ipython 終端提示符

? ?

Odoo shell啟動之后,只提供了 以下幾個變量

變量

類型

env

odoo.api.Environment 對象

odoo

odoo 模塊

openerp

odoo 模塊

self

res.users(1,) 記錄

??

??

? ?

registry Odoo實例維護的信息中心,可以通過 env.registry 獲取

? ?

通過 env.registry.models 可以 獲取當前 Odoo實例 的模型列表, 它返回的結果是,ModelClass Model 字典鍵值對,例如

? ?

查看下 常用的 模型,例如 product.product

product.product ModelClass ; odoo.api.product.product 則是 Model

? ?

? ?

也可以通過 env['product.product'] 獲取 Model

而這個 Model 本身就是 odoo.api.product.product

? ?

再開看看 odoo.api.product.product 的基類

? ?

從注冊表 獲取 odoo.api.product.product 對應的 Model Class, 發現 product.product 是在所有 定義/擴展過 product.product 模型的 模型基礎上 再組裝出來的。

?

? ?

Odoo Shell 操作 Odoo 記錄

? ?

查詢產品

env['product.product'].search([])

? ?

? ?

遍歷查看產品的名稱

for prod in env['product.product'].search([]):

print prod.name

? ?

? ?

修改產品的屬性

? ?

例如修改 id = 1 產品的名稱

? ?

只要能取得模型,模型的一切方法都能調用, 標準的方法

方法

必要參數

選參

search

domain

??

search_count

domain

??

search_read

domain

??

browse

??

??

copy

??

??

copy_data

??

??

create

??

??

default_get

??

??

name_get

??

??

read

??

??

read_group

??

??

unlink

??

??

write

??

??

update

vals 字典

??

? ?

提示

Odoo 的模型其實是 轉包過一次的,并不是 product.product,而是 odoo.api.product.product 而且 Model 通過 Model Class 來進行實例化出來的。

嚴格意義上來講,在寫Odoo 模型Model 時,其實是在 Model Class 的父類, 最終這些 父類會 匯總 派生出 Model Class,進而實例化為 model,而recordset 也是 Model Class 衍生出來的

<rt id="umcai"><optgroup id="umcai"></optgroup></rt>
<tr id="umcai"><small id="umcai"></small></tr><rt id="umcai"><small id="umcai"></small></rt>
<acronym id="umcai"><small id="umcai"></small></acronym>