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

Odoo v11:点击res.partner按钮显示其他模型树视图遇External ID未找到错误

嘿,我来帮你搞定这个「External ID not found」的问题!这种情况在Odoo开发里太常见了,我自己也踩过不少坑,咱们一步步排查解决:

可能的原因及对应解决方案

1. 先检查所有外部ID的拼写和存在性

最容易犯的错就是拼写错误或者引用了根本没创建的外部ID:

  • 你继承的表单视图inherit_id那里,代码里写的base.vi...肯定是没写完,必须写全base.view_partner_form,少一个字母都不行。
  • 按钮要打开的树视图/动作的外部ID,得确认对应的<record>已经正确定义,ID没有写错。比如如果是自定义模型的树视图,你得先把这个树视图的XML写好,并且ID和你引用的一致。

给你一个正确的继承表单视图并添加按钮的示例:

<record id="similar_list_view_partner_form" model="ir.ui.view">
    <field name="name">similar_list_view_partner_form</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/> <!-- 这里必须写全正确的外部ID -->
    <field name="arch" type="xml">
        <!-- 比如在表单按钮区添加按钮,xpath定位可以根据你的需求调整 -->
        <xpath expr="//div[hasclass('oe_button_box')]" position="inside">
            <button name="action_open_similar_records" string="查看相似记录" type="object" class="oe_highlight"/>
        </xpath>
    </field>
</record>

2. 确保按钮绑定的动作(Action)配置正确

点击按钮打开树视图,必须依赖一个ir.actions.act_window动作,这个动作的外部ID和引用一定要准确:

<!-- 先定义目标模型的树视图(如果是自定义模型的话) -->
<record id="view_similar_records_tree" model="ir.ui.view">
    <field name="name">similar.records.tree</field>
    <field name="model">your.custom.model</field> <!-- 替换成你要打开的模型名称 -->
    <field name="arch" type="xml">
        <tree>
            <field name="name"/>
            <field name="partner_id"/>
            <!-- 这里添加你需要显示的字段 -->
        </tree>
    </field>
</record>

<!-- 定义打开树视图的动作 -->
<record id="action_open_similar_records" model="ir.actions.act_window">
    <field name="name">相似记录</field>
    <field name="res_model">your.custom.model</field> <!-- 和上面的模型一致 -->
    <field name="view_mode">tree</field>
    <!-- 这里的ref必须是「模块名.视图ID」,如果当前模块就是视图所在模块,模块名可以省略,但建议加上避免冲突 -->
    <field name="view_id" ref="your_module_name.view_similar_records_tree"/>
    <!-- 可选:添加默认过滤条件,比如只显示当前伙伴的相关记录 -->
    <field name="domain">[('partner_id', '=', active_id)]</field>
</record>

3. 检查模块依赖是否配置到位

如果你的目标模型或者视图是在其他Odoo模块里定义的(比如sale、purchase),必须在当前模块的__manifest__.py里添加依赖,否则Odoo加载你的模块时,依赖模块还没加载,自然找不到对应的外部ID:

{
    'name': '你的模块名称',
    'depends': ['base', 'sale'],  # 比如依赖base和sale模块,根据你的需求添加
    'data': [
        'views/partner_views.xml',  # 确保你的视图XML文件在这里声明,Odoo才会加载它
        # 其他需要加载的XML文件
    ],
    # 其他模块配置项
}

4. 确认XML文件已被正确加载

一定要把包含视图和动作的XML文件添加到__manifest__.py的data列表里!如果没加,Odoo根本不会读取这些定义,外部ID自然不存在。

5. 清除缓存并更新模块

有时候代码改对了,但Odoo的缓存还没更新,也会报错。可以试试这些操作:

  • 切换到开发者模式,点击「更新模块列表」,然后找到你的模块点击「更新」
  • 如果还是不行,先卸载模块,再重新安装
  • 最后清除浏览器缓存,刷新页面再测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:27