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
},
});
});
案例非常简单,但是我找不到任何解决方案。
.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
},
});
});