问题描述:

升级了自己二开的发票模块后,出现原有发票数据的数量为0的情况

解决过程:

  1. 本地恢复线上升级前的数据库,并 git 切换到升级前的版本,模拟线上升级前的环境,开始升级

  2. 由于是从 master 合并 dev 分支,commit 数有七八个,二分法通过git checkout切换版本升级,确定出现问题的 commit

  3. 第一次二分法升级后出现问题,重新初始化模拟环境继续二分法,结果没找到问题,一直checkout到最新代码都没有出现。查找异常 commit 失败

  4. 重新初始化升级环境,直接升级到最新代码,检查log,搜索关键字,发现

    odoo.schema: Table ‘account_invoice_line'’: column ‘quantity’: dropped constraint NOT NULL odoo.schema: Table ‘account_invoice_line': renamed column ‘quantity’ to ‘‘quantity_moved1’ odoo.schema: Table ‘account_invoice_line': added column ‘quantity’ of type int4

    该日志,确定问题为数据库字段发生变化,导致字段数据变为新字段默认值0

  5. 查找该字段的代码,发现是重构了源码的字段,源码是 Float 类型,重构成了 Integer 类型,并添加注释为中文注释。猜测当时的情况应该只是想修改为中文注释…

问题确定

由于字段类型前后不一致,导致升级过程中,odoo 重命名了旧字段,创建新字段。

另外存在一个问题,

发现在二开代码中,该字段是在 2018-10-10 提交,项目升级前的代码版本是 2018-11-29 现在时间是 2019-04-23 ,讲道理如果存在这个问题,应该之前每次升级就会出现了,并且一开始的通过 checkout 升级,也有时出现有时没有,很奇怪。odoo 迷之问题。

解决方案:

python  odoo