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

如何用JS或Controller在Odoo 16表单视图中嵌入通用QWeb视图?

解决Odoo表单视图复用统一摘要组件的问题

Odoo的表单视图(form视图)属于架构视图范畴,本身不支持t-call这类QWeb模板调用语法,想要实现统一摘要信息的复用,可通过以下两种方式解决:

方法1:通过视图继承注入通用片段

适合静态或简单内容的复用:

  1. 先定义通用的XML片段视图:
<record id="ec_summary_board_snippet" model="ir.ui.view">
    <field name="name">ec.summary.board.snippet</field>
    <field name="model">ir.ui.view</field>
    <field name="arch" type="xml">
        <div class="p-3">
            Hello World
        </div>
    </field>
</record>
  1. 继承目标表单视图,用xpath将片段注入到表单内:
<record id="ec_medical_first_consultation_form_view" model="ir.ui.view">
    <field name="name">ec.first.consultation.form</field>
    <field name="model">ec.first.consultation</field>
    <field name="inherit_id" ref="base.view_form"/>
    <field name="arch" type="xml">
        <xpath expr="//form" position="inside">
            <field name="ec_summary_board_snippet" widget="html"/>
        </xpath>
    </field>
</record>

需要给多个表单添加时,重复继承对应表单视图,用相同的xpath逻辑注入即可。

方法2:自定义Widget实现动态复用

适合需要绑定数据或交互逻辑的场景:

  1. 编写Widget的JS逻辑:
odoo.define('ec_summary_board.widget', function (require) {
    'use strict';
    var core = require('web.core');
    var Widget = require('web.Widget');

    var EcSummaryBoard = Widget.extend({
        template: 'EcSummaryBoardCustom',
        init: function (parent, record) {
            this._super(parent);
            this.record = record;
        },
        // 可在此添加数据处理、事件绑定等逻辑
    });

    core.form_widget_registry.add('ec_summary_board', EcSummaryBoard);
    return EcSummaryBoard;
});
  1. 编写对应的QWeb模板:
<template id="EcSummaryBoardCustom" xml:space="preserve">
    <div class="p-3">
        Hello World - <t t-esc="record.data.name"/>
    </div>
</template>
  1. 在表单视图中直接使用该Widget:
<record id="ec_medical_first_consultation_form_view" model="ir.ui.view">
    <field name="name">ec.first.consultation.form</field>
    <field name="model">ec.first.consultation</field>
    <field name="arch" type="xml">
        <form string="First Consultation">
            <widget name="ec_summary_board"/>
            <!-- 其他表单字段内容 -->
        </form>
    </field>
</record>

关键提示

表单视图的arch结构仅支持Odoo官方定义的表单标签(如form、sheet、group、field等),无法直接使用QWeb的t-call语法,需通过上述视图继承或自定义Widget的方式实现组件复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:07:33