Odoo 14 CE 实现模块可选依赖的方法咨询
Odoo可选依赖功能实现方案
完全可以在单个模块内实现该需求,无需将可选依赖模块添加到manifest的depends属性中,具体实现方式如下:
1. 可选依赖的Python代码动态加载
在你的自定义模块的__init__.py中加入模块存在性判断逻辑,仅当目标可选依赖模块已安装时才加载对应扩展代码:
from odoo import modules # 判断purchase模块是否已安装 if 'purchase' in modules.get_installed_modules(): # 导入purchase模块对应的扩展代码文件 from . import models_purchase
单独创建models_purchase.py文件,在该文件内正常编写purchase相关模型的扩展逻辑即可,和常规模型继承写法完全一致:
from odoo import models, fields class PurchaseOrder(models.Model): _inherit = 'purchase.order' # 你需要新增的对应字段 custom_common_field = fields.Char(string='通用自定义字段')
2. XML视图/数据的条件加载
对于需要适配可选依赖模块的视图、菜单、规则等XML数据,在对应<record>标签上添加if_module="purchase"属性即可,Odoo会自动判断模块是否存在,不存在时直接忽略该条记录:
<odoo> <!-- 仅当purchase模块安装时,该视图继承才会生效 --> <record id="view_purchase_order_custom_inherit" model="ir.ui.view" if_module="purchase"> <field name="name">purchase.order.custom.inherit</field> <field name="model">purchase.order</field> <field name="inherit_id" ref="purchase.purchase_order_view_form"/> <field name="arch" type="xml"> <field name="partner_id" position="after"> <field name="custom_common_field"/> </field> </field> </record> </odoo>
3. 效果验证
修改完成后升级你的自定义模块即可:
- 若当前数据库未安装purchase模块,所有purchase相关的扩展代码和视图都不会加载,不会影响sale、account模块的默认扩展功能
- 若后续安装了purchase模块,只需要重新升级一次你的自定义模块,purchase相关的扩展就会自动生效
注意事项
- 所有和可选依赖模块相关的模型、方法引用,都必须放到动态导入的文件中,不要在默认加载的代码里直接引用,避免可选模块未安装时报模型不存在的错误
- 可选依赖模块安装后,必须重新升级一次你的自定义模块,才能触发对应扩展逻辑的加载
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

