odoo作为开源平台,十分适用处理企业业务并成为数据中台。由此我们经常要进行与第三方软件的对接,这时,就需要了解odoo的数据字典了。
核心数据交互全部使用XML及JSON,odoo对开发者极其友好,全开源的平台,基于微服务的架构,意味着你完成了开发,也就完成了接口及相关文档。
下文将指引我们查看odoo的数据表及字段,用于odoo双向对接。
主要内容为:
知识准备
知识准备很重要,odoo是完全面向对象的。所以会有对象的继承,这会导致并不是每个对象的完整内容都在本对象表的。
几个注重点,比如
- selection字段,虽然也可以取到对应关系,但省事的办法还是自行对照。比如销售订单 sale.order中的状态字段 state: draft=草稿, sale=销售订单。这个自己做个对应会更省事
- datetime字段,在 pg库中,保存的时间都是带时区的时间字段,都是 utc时间。在国内,如果要应用,多数要+8小时,这个如果是对接数据库,那么直接用 pg的 时区转换函数即可( at TIMEZONE 'UTC+8')
查看数据字典
进入系统后,开启开发者模式。
方式一:右上角点击
方式二:直接 url中增加 debug=1,有时方式一没权限则可如此处理,如
https://demo.erpapp.cn/web?debug=1
实例比如我们要对接库存,先进入相关功能中
再确认是哪张数据表,从url中可以看中,model后面的值即是对象,如:
https://demo.erpapp.cn/web?debug=1#action=1320&model=stock.quant
则数据表为 stock_quant,将对象的 "." 换为 "_",即为数据表了。
或者点击该数据,进入详情,把鼠标放在字段上,就会显示相关信息。其“对象”就表明了是哪张表。
其它的,“字段”即字段名本例为 product_id,类型即是字段的类型,这个详见 orm 文档学习
https://www.sunpop.cn/documentation/13.0/reference/orm.html
“关系”表明这是一个关系字段,对应 product.product 对象,即 product_product 表。所有的 m2o字段,存的都是对应关系表的id字段。
比如从 stock_quant中取到记录的 product_id=3,则是对应 product_product数据表中 id=3的产品。那么我们要取产品编码则是 product_product.default_code as product_code left join product_product on product_product.id = stock_quant.product_id
以上,我们就可知道库存明细表的数据表及字段相关了。
一句话,开发者模式,把鼠标放在字段上方,即可知道相关数据字典。
查看全数据字典
开发者模式下,在菜单
设置-技术-数据库结构-模型,可以看到所有对象,
可以按模型名搜索,比如 stock.location
具体进入对象详情,点击字段,可以查看所有字段。
或者,在具体对象的列表或者详情界面,点击 debug图标后,点击 视图字段。即可查看本对象全部的字段。
集团多公司相关
odoo中很多主表的对象,都会有1个company_id字段,代表数据是属于哪个公司的。
在 res.company对象,即res_company表中,可查询到各公司信息及层级关系。
通用的关键字段
odoo的基本每个对象都有些关键字段,主要的如下:
id: 整型的自增id值,每条记录有个唯一的id,别的对象如 b 引用本对象 a,在 b 表中保存的对应 a 值,就是用此 id值
name: 名称。 一般是在被关联引用时,显示在界面的值。 正常情况下是显示 display_name的值,但display_name一般是计算字段,不保存在数据库。
create_uid: 记录创建者
create_date: 记录创建时间,注意是个 UTC 的时间戳。
write_uid: 记录最后更新者
write_date: 记录最后更新时间
** 注意,odoo里所有 datetime类型的字段,保存的都是带时区的 UTC 格林威治时间。从数据库中取值可以用 PG自带的 at TIME zone
处理成中国时间
其它
对于非实体表的,以及继承相关的,遇到问题直接咨询你的支持合作伙伴即可。