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
相关产品推荐
相关产品推荐

