Odoo16 POS加载自定义字段报错:models.load_fields is not a function
Odoo16 POS加载自定义字段报错解决
问题描述
在Odoo16 POS模块中,尝试调用models.load_fields方法为订单行加载product.product模型的自定义字段'test'时,控制台抛出错误:TypeError: models.load_fields is not a function,需求是将该自定义字段显示在POS订单中。
错误代码如下:
odoo.define('serial_attributes.pos_attributes', function (require) { "use strict"; console.log("Iam HEreeeeeeeeeeeeeee!!!!!!!!!!!!!!!") var models = require("point_of_sale.models"); var _super_orderline = models.Orderline.prototype; console.log("models", models); models.load_fields("product.product", "test") models.Orderline = models.Orderline.extend({ initialize: function (attr, options) { var line = _super_orderline.initialize.apply(this, session, arguments); this.test = this.product.test; console.log("test", this.test) } }) })
原因分析
Odoo16的POS模块已移除models.load_fields方法,加载自定义字段需通过扩展POS的产品模型来配置同步字段。
修正方案
通过扩展models.Product模型将自定义字段加入同步列表,同时修正订单行初始化方法的参数错误:
修正后的代码:
odoo.define('serial_attributes.pos_attributes', function (require) { "use strict"; var models = require("point_of_sale.models"); var _super_orderline = models.Orderline.prototype; var _super_product = models.Product.prototype; // 扩展产品模型,同步自定义字段值 models.Product = models.Product.extend({ init_from_JSON: function (json) { _super_product.init_from_JSON.apply(this, arguments); this.test = json.test; }, }); // 将test字段加入POS同步的product.product字段列表 models.PosModel.models.product.product.fields.push('test'); // 扩展订单行模型,获取自定义字段值 models.Orderline = models.Orderline.extend({ initialize: function (attr, options) { _super_orderline.initialize.apply(this, arguments); this.test = this.product ? this.product.test : undefined; console.log("test", this.test); } }); })
关键改动说明
- 移除无效方法调用:删除
models.load_fields,改用models.PosModel.models.product.product.fields.push('test')配置同步字段 - 扩展产品模型:通过
init_from_JSON方法将同步的JSON数据中的'test'字段赋值给产品实例 - 修正初始化参数:原代码
apply(this, session, arguments)参数错误,改为apply(this, arguments),同时增加this.product存在性判断避免报错
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

