iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

在 Odoo 中,繼承和覆蓋(Overriding)機制是其模組擴展的重要部分,允許開發人員在不改變核心代碼的情況下自訂現有模組。Odoo 提供三種主要的繼承方式:

  1. 類的繼承(Class Inheritance):擴展或覆蓋模型的功能。
  2. 視圖的繼承(View Inheritance):自訂或擴展現有的 UI 元素。
  3. 方法的繼承(Method Overriding):覆蓋模型中的業務邏輯。

示例:繼承與覆蓋模型和方法

假設我們有一個 Odoo 模組 sale,裡面有一個 sale.order 模型。現在我們希望添加一個新字段,並且覆蓋保存(create)方法來添加一些自訂邏輯。

1. 繼承模型

首先,我們會在我們的自訂模組中繼承 sale.order 模型並添加一個新字段。

models/inherited_sale_order.py

from odoo import models, fields

class InheritedSaleOrder(models.Model):
    _inherit = 'sale.order'

    # 添加一個新字段
    custom_note = fields.Char(string='Custom Note')

我們就成功繼承了 sale.order 模型並添加了 custom_note 字段。

2. 覆蓋方法

接著,我們覆蓋 create 方法,在每次保存銷售訂單時,自動在 custom_note 字段中添加一段自訂訊息。

from odoo import models, fields

class InheritedSaleOrder(models.Model):
    _inherit = 'sale.order'

    custom_note = fields.Char(string='Custom Note')

    # 覆蓋 create 方法
    @api.model
    def create(self, vals):
        # 在 custom_note 字段中添加一段自訂訊息
        vals['custom_note'] = 'This order was created by %s' % self.env.user.name
        return super(InheritedSaleOrder, self).create(vals)

在這個例子中,我們先調用了父類的 create 方法,然後在 custom_note 中添加了創建訂單的用戶名稱。

3. 繼承視圖

我們還可以繼承 sale.order 的視圖來顯示新字段 custom_note。這裡我們會修改 sale.order.form 的表單視圖。

views/inherited_sale_order_view.xml

<odoo>
    <record id="view_order_form_inherited" model="ir.ui.view">
        <field name="name">sale.order.form.inherited</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <!-- 在 customer signature 欄位之後插入 custom_note 字段 -->
            <xpath expr="//field[@name='client_order_ref']" position="after">
                <field name="custom_note"/>
            </xpath>
        </field>
    </record>
</odoo>

這段 XML 代碼會修改 sale.order.form 表單,將 custom_note 字段插入到 "customer signature" 之後。

總結一下以上流程~

1️⃣繼承模型:擴展現有模型(如 sale.order)並添加自訂字段。
2️⃣ 覆蓋方法:使用 Python 裡的 @api.model 裝飾器來覆蓋核心邏輯,對 createwrite 方法進行修改。
3️⃣ 繼承視圖:使用 Odoo 的 XML 定義文件來修改已有的表單或樹狀視圖,顯示新增的字段或修改介面佈局。


上一篇
DAY7常用模組結構(2)
下一篇
DAY9 「提升業務效率:如何通過 Odoo CRM 自動化插件實現高價值客戶管理」
系列文
「Odoo 解構:開源 ERP 平台的進階設計與實踐」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言