问题描述:
升级了自己二开的发票模块后,出现原有发票数据的数量为0的情况
解决过程:
-
本地恢复线上升级前的数据库,并
git
切换到升级前的版本,模拟线上升级前的环境,开始升级 -
由于是从
master
合并dev
分支,commit
数有七八个,二分法通过git checkout
切换版本升级,确定出现问题的commit
-
第一次二分法升级后出现问题,重新初始化模拟环境继续二分法,结果没找到问题,一直
checkout
到最新代码都没有出现。查找异常commit
失败 -
重新初始化升级环境,直接升级到最新代码,检查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
-
查找该字段的代码,发现是重构了源码的字段,源码是
Float
类型,重构成了Integer
类型,并添加注释为中文注释。猜测当时的情况应该只是想修改为中文注释…
问题确定
由于字段类型前后不一致,导致升级过程中,odoo
重命名了旧字段,创建新字段。
另外存在一个问题,
发现在二开代码中,该字段是在 2018-10-10 提交,项目升级前的代码版本是 2018-11-29 现在时间是 2019-04-23 ,讲道理如果存在这个问题,应该之前每次升级就会出现了,并且一开始的通过 checkout
升级,也有时出现有时没有,很奇怪。odoo
迷之问题。
解决方案:
-
数据库方面:
ALTER TABLE "public"."account_invoice_line" DROP COLUMN "quantity"; ALTER TABLE "public"."account_invoice_line" RENAME COLUMN "quantity_moved1" TO "quantity"; 复制代码
-
代码方面:
出现问题的
quantity
字段修正之前的Integer
类型为Float
类型
个人博客 原文地址