在前面我們學習了如何建立新的模組與定義 Model、View、Controller。實際專案中,企業往往不會從零開始,而是需要 在現有模組上進行擴充。今天我們將以 CRM 模組 為例,示範如何透過繼承與擴充,來增加新功能。
假設我們的銷售團隊希望在 CRM 中的「商機 (Opportunity)」紀錄上,額外記錄一個 競爭對手 (Competitor) 欄位,並能在報表中查看。這就是典型的「客製化需求」。
在 addons 下建立一個新模組 crm_extension:
crm\_extension/
│── **init**.py
│── **manifest**.py
│── models/
│    └── **init**.py
│    └── crm\_lead\_inherit.py
│── views/
└── crm\_lead\_view\.xml
{
    'name': 'CRM Extension',
    'version': '1.0',
    'summary': 'Extend CRM with competitor field',
    'author': 'Your Name',
    'depends': ['crm'],
    'data': [
        'views/crm_lead_view.xml',
    ],
    'installable': True,
    'application': False,
}
Odoo 提供 繼承 (inheritance) 機制,可在不修改核心程式碼的情況下擴充功能。
models/crm_lead_inherit.py:
from odoo import models, fields
class CRMLeadInherit(models.Model):
    _inherit = 'crm.lead'
    competitor = fields.Char('Competitor')
這樣就能在 crm.lead 模型(商機)中新增一個 competitor 欄位。
在 views/crm_lead_view.xml 中加入新的欄位:
<odoo>
  <record id="view_crm_lead_form_inherit" model="ir.ui.view">
    <field name="name">crm.lead.form.inherit</field>
    <field name="model">crm.lead</field>
    <field name="inherit_id" ref="crm.crm_lead_view_form"/>
    <field name="arch" type="xml">
      <xpath expr="//sheet/group/group" position="inside">
        <field name="competitor"/>
      </xpath>
    </field>
  </record>
</odoo>
這段 XML 會在商機表單的既有區塊中插入「競爭對手」欄位。
CRM Extension 模組。這個欄位也能被加入到報表或 Pivot 視圖中,方便銷售團隊分析。
這個範例展示了 Odoo 客製化的常見流程:
_inherit 擴充既有 Model。這種方式保證核心模組不被修改,方便升級與維護。在下一篇文章中,我將帶你認識 Odoo 權限控制與使用者角色管理,確保系統功能在安全的前提下被正確使用。