首页 > 代码库 > Odoo Shell

Odoo Shell

Odoo shell 提供了一个简便的操作 Odoo的交互界面, odoo 9.0 开始就是标准功能, 无需安装第三方应用。

   

本文基于Odoo10 说明 Odoo Shell以及 Odoo ModelClass Modelmodelrecordset 之间的关系 [注意:大小写是有特殊含义]

   

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 衍生出来的

Odoo Shell