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

Odoo多站点场景下如何避免WebEditor覆盖自定义模块视图

Odoo多站点下阻止WebEditor视图覆盖自定义继承的解决方案

问题根源:Odoo多站点场景中,使用WebEditor编辑portal_my_details页面时,系统会自动生成对应网站的专属视图(ID格式如portal_my_details[mywebsitename]),该视图与原基础视图使用相同的key,会直接覆盖原视图及基于原视图的自定义继承逻辑,导致新增的企业邮箱、电话字段失效。

以下是三种可行的解决方式:

方案1:禁止WebEditor编辑该视图(彻底阻止生成专属视图)

通过修改原视图的customize_show属性,禁用WebEditor对该视图的编辑权限,系统就不会生成网站专属视图。在自定义模块中添加以下XML代码:

<odoo>
    <data>
        <!-- 禁用portal_my_details视图的WebEditor编辑权限 -->
        <record id="portal.portal_my_details" model="ir.ui.view">
            <field name="customize_show">False</field>
        </record>

        <!-- 原有的继承模板代码 -->
        <template id="portal_my_details_zsb" inherit_id="portal.portal_my_details">
            <xpath expr="//form/div[hasclass('o_portal_details')]/div/div" position="inside">
                <div t-attf-class="form-group #{error.get('mbr_pro_email') and 'o_has_error' or ''} col-xl-6">
                  <label class="col-form-label" for="mbr_pro_email">Email Pro.</label>
                  <input type="email" name="mbr_pro_email" t-attf-class="form-control #{error.get('mbr_pro_email') and 'is-invalid' or ''}" t-att-value="mbr_pro_email or partner.mbr_pro_email"/>
                </div>
                <div t-attf-class="form-group #{error.get('mbr_pro_phone') and 'o_has_error' or ''} col-xl-6">
                  <label class="col-form-label" for="mbr_pro_phone">Téléphone Pro.</label>
                  <input type="tel" name="mbr_pro_phone" t-attf-class="form-control #{error.get('mbr_pro_phone') and 'is-invalid' or ''}" t-att-value="mbr_pro_phone or partner.mbr_pro_phone"/>
                </div>
            </xpath>
        </template>
    </data>
</odoo>

优点:彻底解决视图覆盖问题,无需担心后续站点编辑影响;缺点:无法通过WebEditor修改该页面的其他内容。

方案2:提高自定义继承视图的优先级

Odoo视图的优先级由sequence字段控制,数值越小优先级越高。给自定义继承视图设置更小的sequence,确保它在网站专属视图之后仍能生效:

修改原继承模板,添加sequence="1"属性:

<template id="portal_my_details_zsb" inherit_id="portal.portal_my_details" sequence="1">
    <xpath expr="//form/div[hasclass('o_portal_details')]/div/div" position="inside">
        <!-- 你的自定义字段代码 -->
    </xpath>
</template>

优点:允许继续使用WebEditor编辑页面,自定义字段会保留;缺点:若WebEditor直接删除了自定义字段所在的父容器,仍会导致字段消失。

方案3:让继承视图对所有网站生效

在继承模板中添加website_id="False",使该继承视图应用于所有网站(包括自动生成的网站专属视图):

<template id="portal_my_details_zsb" inherit_id="portal.portal_my_details" website_id="False">
    <xpath expr="//form/div[hasclass('o_portal_details')]/div/div" position="inside">
        <!-- 你的自定义字段代码 -->
    </xpath>
</template>

优点:无需修改原视图权限,自动适配所有站点;缺点:若网站专属视图的结构与原视图差异过大,可能导致xpath定位失效。

内容的提问来源于stack exchange,提问作者Ahrimann Steiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:15:25