You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,请问哪里操作错误?

错误原因及修正方案

  1. 字段名称拼写错误
    模型中定义的字段是access_token,但JS代码中错误地使用了checkbox_token,字段名不匹配导致无法获取值。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:53:26