Odoo tree列表查询或显示结果只有一条记录时自动点击跳转到form表单

文章介绍了如何通过修改Odoo中的AbstractController.js文件并添加自定义模板,实现当查询结果或模块只有一条记录时,系统自动跳转到form表单详情页。通过在特定模块的判断,可以控制此功能的适用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Odoo tree列表查询或显示结果只有一条记录时自动点击跳转到form表单

需求: 查询结果是一条记录或者模块是一条记录时默认显示form表单详情页。

经过查找在Odoo应用市场找到Show Form View If Search Result Is One模块。
https://apps.odoo.com/apps/modules/15.0/show_form_view_after_search/

微调适配

下载后在\static\src\js目录下找到AbstractController.js文件,内容如下:

odoo.define('show_form_view_after_search.AbstractController', function (require) {
    "use strict";
    var AbstractController = require('web.AbstractController');
	
    var includeDict = {
        reload: async function (params) {
            var res = await this._super.apply(this, arguments);
            // 判断只有是看板视图或者列表视图进行后续操作
            if (this.viewType === "kanban" || this.viewType === "list"){
                //if (this.renderer.state !== undefined && this.renderer.state.count === 1 && this.modelName === "product.template") {
                if (this.renderer.state !== undefined && this.renderer.state.count === 1) {
                    var $o_record = this.renderer.$el.find('.o_data_row,.o_kanban_record').not( ".o_kanban_ghost" );
                    // 判断记录只有一条时,触发点击事件进入form表单页
                    if ($o_record.length === 1) {
                        $o_record.trigger("click");
                    }
                }
            }
            return res;
        },
    };
    AbstractController.include(includeDict);

});

AbstractController.js文件复制到项模块的\static\src\js下,然后在view文件夹下创建templates.xml填入下面内容引用该js文件:

<odoo>
    <data>
        <template id="assets_backend" inherit_id="web.assets_backend" name="odoo_test_assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" charset="utf-8" src="/bi_sip/static/src/js/one_record_show_form.js"/>
            </xpath>
        </template>
    </data>
</odoo>

注:需要在__manifest__.py内配置templates.xml

现在重启升级就可以进行测试了,当模块下数据只有一条或者查询结果只有一条时,会自动点击进入详情form表单页。

增加模块判断

往往这种需求只针对特殊模块或者某些模块,这时候只需要添加模块判断即可,修改后代码如下:

odoo.define('show_form_view_after_search.AbstractController', function (require) {
    "use strict";

    var AbstractController = require('web.AbstractController');

     var includeDict = {
        reload: async function (params) {
            var res = await this._super.apply(this, arguments);
            // 判断模块名称是指定模块或者在某些模块内,再进行后续操作
            // if (['odoo_test.my_model_1', 'odoo_test.my_model_2', 'odoo_test.my_model_3'].includes(this.modelName)) {
            if (this.modelName === 'odoo_test.my_model') {
	            // 判断只有是看板视图或者列表视图进行后续操作
	            if (this.viewType === "kanban" || this.viewType === "list"){
	                //if (this.renderer.state !== undefined && this.renderer.state.count === 1 && this.modelName === "product.template") {
	                if (this.renderer.state !== undefined && this.renderer.state.count === 1) {
	                    var $o_record = this.renderer.$el.find('.o_data_row,.o_kanban_record').not( ".o_kanban_ghost" );
	                    // 判断记录只有一条时,触发点击事件进入form表单页
	                    if ($o_record.length === 1) {
	                        $o_record.trigger("click");
	                    }
	                }
	            }
	        }
            return res;
        },
    };
    AbstractController.include(includeDict);

});

结语

经过上述配置,就可以自由控制哪些model调用此js,同时了解如何在视图中引入自定义js文件。

### Odoo Tree View Group By Collapse 实现方法 在 Odoo 中,`<tree>` 视图支持通过 `group_by` 属性来实现数据分组显示。为了使这些分组默认处于折叠状态,可以在视图定义中加入特定参数。 对于 XML 定义中的树形视图部分,在 `<field>` 标签内设置 `groups` 者直接利用上下文(context)传递给该视图以控制初始加载是否展开分组: 当希望所有新打开的页面都应用此行为,则可以修改相应模型的动作(action),向其 context 添加 `'group_by_no_leaf': True, 'default_group_by': ['字段名']` 参数[^1]。这会使得指定字段作为默认分组依据,并且不会自动展开子节点。 如果仅需针对某个具体视图做调整而不影响全局配置的话,可以通过继承原有动作并重写其中的部分属性来达成目的;者是在前端 JavaScript 文件里监听列表渲染事件,动态改变当前视图的行为模式[^2]。 另外值得注意的是,从版本 14 开始,Odoo 提供了一个更简便的方式——直接在 tree 视图定义中增加 `decoration-set="true"` 和 `decoration-collapse="true"` 来启用这一特性[^3]。不过这种方法可能依赖于具体的模块实现情况以及所使用的 Odoo 版本号,请根据实际情况测试验证效果。 ```xml <!-- 使用context方式 --> <record id="action_id" model="ir.actions.act_window"> <field name="context">{'group_by_no_leaf': True, 'default_group_by': ['your_field']}</field> </record> <!-- 直接在view中添加装饰器 (适用于V14+) --> <tree decoration-set="true" decoration-collapse="true"> <!-- fields definition here --> </tree> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在那路边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值