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

Odoo如何无刷新更新字段值?点击按钮后页面重载值不显示问题

问题原因

出现点击按钮后页面自动重载、字段值不显示的问题,核心原因有两个:

  • 你绑定的refresh_credits方法执行完成后没有返回任何前端动作指令,Odoo对type="object"类型的按钮默认会触发整页提交重载。
  • res.config.settings是临时向导模型(TransientModel),你在方法内给字段赋的值只存在于当前请求的内存中,没有持久化,页面重载时重新拉取记录自然读不到刚赋值的内容,后台日志能打印值是因为赋值逻辑在请求内存中执行成功了。
修复方案

1. 修改Python端代码

给方法补充返回当前视图的刷新动作,同时根据你的需求补全字段的持久化逻辑,修改后代码如下:

from odoo import models, fields
import logging

_logger = logging.getLogger(__name__)

class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    # 如果不需要持久化存储这个积分值,只是点击按钮临时展示,可以去掉config_parameter参数
    new_credits = fields.Integer(string="Credits", config_parameter="custom_module.new_credits")

    def refresh_credits(self):
        self.ensure_one()
        credit_data = self.env['show.credits'].content_credits_info()
        target_credit = credit_data[4]
        _logger.info("拉取到的积分值:%s", target_credit)
        self.new_credits = target_credit
        # 核心:返回当前向导的窗口动作,重载当前记录,替代默认的整页回退逻辑
        return {
            "type": "ir.actions.act_window",
            "res_model": self._name,
            "res_id": self.id,
            "view_mode": "form",
            "target": "current",
        }

如果你没有给字段加config_parameter自动关联系统参数,需要自己重写设置模型的get_values、set_values方法完成值的读写,否则页面刷新后值还是会丢失。

2. XML代码调整(可选)

现有XML代码不需要大改,如果要避免按钮点击时触发表单上其他字段的校验,可以给按钮增加no_validate类,修改后如下:

<button type="object" name="refresh_credits" class="btn-link no_validate" icon="fa-refresh"/>
<span class="btn-link">Credits</span>
<field name="new_credits"/>

修改完成后升级自定义模块,点击刷新按钮就会正常拉取积分值显示在字段中,不会出现无意义的整页重载丢值问题。

内容的提问来源于stack exchange,提问作者arleite

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:21:40