通过Odoo Shell来操作线上的数据

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.

   

通过Odoo Shell来操作线上的数据_第1张图片

   

   

而 Shell command.

通过Odoo Shell来操作线上的数据_第2张图片

   

   

而从 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. 启动之后

通过Odoo Shell来操作线上的数据_第3张图片

出现 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 字典键值对,例如

通过Odoo Shell来操作线上的数据_第4张图片

   

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

通过Odoo Shell来操作线上的数据_第5张图片

product.product 是 ModelClass ; 而 odoo.api.product.product 则是 Model

   

   

也可以通过 env['product.product'] 获取 Model

通过Odoo Shell来操作线上的数据_第6张图片

而这个 Model 本身就是 odoo.api.product.product

   

再开看看 odoo.api.product.product 的基类

通过Odoo Shell来操作线上的数据_第7张图片

   

从注册表 获取 odoo.api.product.product 对应的 Model Class, 发现 product.product 是在所有 定义/扩展过 product.product 模型的 模型基础上 再组装出来的。

 

   

Odoo Shell 操作 Odoo 记录

   

查询产品

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

   

通过Odoo Shell来操作线上的数据_第8张图片

   

遍历查看产品的名称

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

print prod.name

   

通过Odoo Shell来操作线上的数据_第9张图片

   

修改产品的属性

   

例如修改 id = 1 产品的名称

通过Odoo Shell来操作线上的数据_第10张图片

   

只要能取得模型,模型的一切方法都能调用, 标准的方法

方法

必要参数

选参

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

转载注明原作者 /by Jeffery

你可能感兴趣的:(通过Odoo Shell来操作线上的数据)