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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:01