Odoo中从POS Session加载扩展字段至POS端失败问题排查
问题分析与解决
问题描述
我扩展了POS Session模型,代码如下:
class POSSession(models.Model): _inherit = 'pos.session' access_token = fields.Char(string="Access Token", readonly=True)
尝试在POS端通过JS获取该字段,代码如下:
odoo.define('your_module_name.some_js_file', function (require) { "use strict"; var models = require('point_of_sale.models'); models.load_fields('pos.session', ['access_token']); const ReceiptCheckboxRegistration = (ReceiptScreen) => class extends ReceiptScreen { mounted() { super.mounted(); var access_token = this.env.pos.session.checkbox_token; console.log(access_token); });
但控制台输出undefined,请问哪里操作错误?
错误原因及修正方案
字段名称拼写错误
模型中定义的字段是access_token,但JS代码中错误地使用了checkbox_token,字段名不匹配导致无法获取值。JS代码语法不完整
类定义未闭合,缺少必要的},同时没有注册修改后的组件,导致代码无法正常执行。
修正后的完整JS代码
odoo.define('your_module_name.some_js_file', function (require) { "use strict"; var models = require('point_of_sale.models'); var ReceiptScreen = require('point_of_sale.ReceiptScreen'); var Registries = require('point_of_sale.Registries'); // 加载pos.session模型的access_token字段 models.load_fields('pos.session', ['access_token']); const ReceiptCheckboxRegistration = (OriginalReceiptScreen) => class extends OriginalReceiptScreen { mounted() { super.mounted(); // 使用正确的字段名access_token var access_token = this.env.pos.session.access_token; console.log(access_token); } }; // 注册修改后的ReceiptScreen组件 Registries.Component.extend(ReceiptScreen, ReceiptCheckboxRegistration); });
额外注意事项
- 确保Python模块已安装并升级,
access_token字段已同步到数据库; - 清除浏览器缓存并重启Odoo服务,保证JS模块被正确加载;
- 确认POS Session已开启,未开启的会话可能不会加载完整字段数据。
内容的提问来源于stack exchange,提问作者onorua
相关产品推荐
相关产品推荐

