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

Odoo 14如何在页面加载完成时调用指定函数

Odoo 14 页面加载完成自动执行指定函数实现方案

你之前配置的XML代码不生效的核心原因:那段<field name="code">是服务端动作(ir.actions.server)的定义内容,这类代码只会在用户主动触发对应动作(点按钮、点绑定了该动作的菜单)时才会执行,本身没有绑定页面加载的生命周期钩子,无论怎么修改这段配置都无法实现页面打开自动运行的效果。

下面分两种业务场景提供可直接落地的实现方式:


场景1:需要执行后端业务逻辑(数据初始化、配置校验、默认值生成等)

如果你的需求是打开页面时自动跑后端的Python逻辑,不要用服务端动作硬写,直接重写对应模型的生命周期方法即可。
以你提到的res.config.settings配置页为例:

  1. 重写模型的get_values方法(该方法会在配置页加载、读取现有配置值时自动执行),示例代码:
class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    @api.model
    def get_values(self):
        # 先执行原有逻辑,拿到现有配置值
        res = super().get_values()
        # 在这里调用你需要自动执行的自定义函数
        self._your_auto_run_func()
        return res

    def _your_auto_run_func(self):
        # 写你的自定义业务逻辑
        pass

重要提示:不要在页面加载阶段直接无参调用原生set_values()方法,该方法是用户点击「保存」按钮时将配置写入数据库的入口,页面加载阶段无参调用会把现有配置覆盖为默认值,造成配置数据异常。

如果是普通模型(非设置向导类的TransientModel)的表单页,可以重写模型的read方法,增加对应判断逻辑,避免每次读取记录都重复执行不必要的操作。


场景2:需要执行前端逻辑(DOM调整、交互提示、前端事件绑定等)

如果你的需求是页面前端渲染完成后执行JS逻辑,需要扩展Odoo14的前端视图组件,通过OWL框架的生命周期钩子触发:

  1. 新建自定义JS文件,存放到你的模块路径/your_module/static/src/js/form_auto_run.js,示例代码:
odoo.define('your_module.FormAutoRun', function (require) {
    "use strict";
    const FormController = require('web.FormController');

    FormController.include({
        start: function () {
            const self = this;
            return this._super.apply(this, arguments).then(function () {
                // 增加模型判断,只在你需要的目标页面执行逻辑,避免影响所有表单页
                if (self.modelName !== 'res.config.settings') {
                    return;
                }
                // 这里写你要在页面加载完成后执行的前端逻辑
                console.log('页面加载完成,执行自定义逻辑');
                // 如果需要调用后端Python方法,用_rpc发起请求即可
                self._rpc({
                    model: 'res.config.settings',
                    method: '_your_auto_run_func',
                    args: [[]],
                })
            });
        },
    });
});
  1. 在模块的XML配置里把JS文件加入后端资源加载列表:
<odoo>
    <template id="assets_auto_run" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/your_module/static/src/js/form_auto_run.js"></script>
        </xpath>
    </template>
</odoo>
  1. 升级模块后,刷新浏览器缓存即可生效。

内容的提问来源于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 10:03:43