Odoo跨模型迁移Many2one字段报can't adapt type错误
报错原因
Odoo中Many2one字段在数据库层存储的是关联记录的整数类型主键ID,直接读取self.warehouse_id得到的是ware.houses模型的记录集对象,psycopg2无法将Python模型对象直接转换为SQL可识别的写入参数,因此抛出类型适配错误。
修改方案
- 给Many2one字段赋值时,取关联记录集的
.id属性获取数据库存储的整数ID即可;如果关联字段为空,传False表示空值,避免空对象取id抛出属性错误。 unit_price是配置了@api.depends的计算字段,创建记录时会自动根据quantity和price的值计算,不需要手动写入传值,冗余传值会被计算逻辑覆盖,可以直接去掉。
修改后的Inventory模块迁移方法代码
def action_delete(self): vals = { 'ref_code': self.ref_code, 'product_name': self.product_name, 'product_description': self.product_description, 'teslim_alan': self.teslim_alan, 'teslim_eden': self.teslim_eden, 'quantity': self.quantity, 'price': self.price, # 兼容仓库为空的场景,空时传False 'warehouse_id': self.warehouse_id.id if self.warehouse_id else False } self.env['scrap'].create(vals) return super(InventoryMenu, self).unlink()
修改后的Scrap模块迁回方法代码
def action_getback(self): vals = { 'ref_code': self.ref_code, 'product_name': self.product_name, 'product_description': self.product_description, 'teslim_alan': self.teslim_alan, 'teslim_eden': self.teslim_eden, 'quantity': self.quantity, 'price': self.price, # 兼容仓库为空的场景,空时传False 'warehouse_id': self.warehouse_id.id if self.warehouse_id else False } self.env['inventory.menu'].create(vals) return super(Scrap, self).unlink()
补充说明:Odoo中给Many2one字段传值支持两种合法格式:一是直接传关联记录的整数ID,二是传对应模型的单条记录集,直接传记录集的写法在新版本Odoo部分场景可能兼容,但旧版本或直接数据库写入场景下必须传整数ID/False,取id传值是兼容性最高的标准写法。
内容的提问来源于stack exchange,提问作者Enes Kara
相关产品推荐
相关产品推荐

