Odoo,覆盖树视图点击的操作以打开另一个模型的表单

Odoo, override tree view click's action to open another model's form

案例非常简单,但是我找不到任何解决方案。

.py
model_a:
    field_b = fields.Many2one('model_b')

.xml
<tree string="List of model_a elements">
    <field name="field_b" />

我有 "model_a" 的列表视图。 我想在用户单击一行时将用户重定向到 field_b 的表单。

非常简单,但是有办法实现吗?

您可以通过在 xml 字段中添加操作视图来轻松完成此操作

<record id="model_a_action" model="ir.actions.act_window">
    <field name="name">model.a.form.action</field>
    <field name="res_model">model.a</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
</record>

如果有人为此搜索解决方案。 这是在 odoo 15

上测试的 js 片段

将其复制到文件并确保通过 __manifest__.py

加载文件

最后一件事:将“from.model”和“to.model”更改为您需要的

odoo.define("nona.redirectToProduct", function (require) {
    "use strict";

    var ListRenderer = require("web.ListRenderer");
    ListRenderer.include({
        _renderRow: function (record) {
            let row = this._super(record);
            var self = this;
            if (record.model == "from.model") {
                row.addClass('o_list_no_open');
                // add click event
                row.bind({
                    click: function (ev) {
                        ev.preventDefault();
                        ev.stopPropagation();
                        self.do_action({
                            type: "ir.actions.act_window",
                            res_model: "to.model",
                            res_id: record.data.product_id,
                            views: [[false, "form"]],
                            target: "target",
                            context: record.context || {},
                        });
                    }
                });
            }
            return row
        },
    });
});