在前面我們學習了如何建立新的模組與定義 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 權限控制與使用者角色管理,確保系統功能在安全的前提下被正確使用。