iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Odoo

用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用系列 第 8

Day 8:Odoo 開發框架簡介(MVC 架構)

  • 分享至 

  • xImage
  •  

在前七天我們主要從使用者的角度認識 Odoo,今天開始將切換到 開發者視角。要進行二次開發或建立新模組,理解 Odoo 的 MVC 架構 (Model–View–Controller) 是必須的基礎。這套設計模式讓 Odoo 保持彈性、擴充性與維護性,是它能成為強大開源平台的原因之一。


1. Odoo 的 MVC 架構總覽

Odoo 透過 MVC 模式將系統分為三層:

  • Model (M):負責資料與商業邏輯,使用 Python ORM 操作 PostgreSQL。
  • View (V):負責前端顯示,主要以 XML/QWeb 定義,支援表單、列表、看板、日曆等多種視圖。
  • Controller (C):負責流程控制與 API,處理 HTTP 請求,將前端操作轉換成後端動作。

這樣的分層設計,讓 Odoo 既能保持核心穩定,又能快速透過模組擴充功能。


2. Model:資料與業務邏輯

在 Odoo 中,每個 Model 對應到資料庫的一個表格,並以 Python 類別定義。

  • 透過繼承 models.Model 建立資料表。
  • 支援欄位型別(Char、Integer、Many2one、One2many 等)。
  • 商業邏輯(例如自動計算、驗證規則)也放在 Model 中。

範例:

from odoo import models, fields

class Book(models.Model):
    _name = 'library.book'
    _description = 'Library Book'

    name = fields.Char('Title', required=True)
    author = fields.Char('Author')
    published_date = fields.Date('Published Date')

3. View:使用者介面

Odoo 的前端顯示由 XML 定義,並透過 QWeb 引擎渲染。
常見的視圖類型:

  • Form:單筆資料編輯。
  • Tree (List):表格形式顯示。
  • Kanban:看板視覺化。
  • Calendar:日曆檢視。
  • Pivot:數據分析。

範例:

<record id="view_library_book_tree" model="ir.ui.view">
  <field name="name">library.book.tree</field>
  <field name="model">library.book</field>
  <field name="arch" type="xml">
    <tree>
      <field name="name"/>
      <field name="author"/>
    </tree>
  </field>
</record>

4. Controller:流程與 API

Controller 負責處理 HTTP 請求,常見於 Web 應用或 REST API 整合。

  • 定義在 controllers 資料夾中。
  • 使用 http.route 裝飾器來綁定 URL。

範例:

from odoo import http

class LibraryController(http.Controller):
    @http.route('/library/books', type='http', auth='public')
    def list_books(self, **kwargs):
        books = http.request.env['library.book'].search([])
        return http.request.render('library.book_template', {'books': books})

5. 小結

Odoo 的 MVC 架構讓開發者能清楚地拆分:

  • Model → 資料與邏輯
  • View → 視覺化呈現
  • Controller → 流程控制與外部介接

在接下來的篇章,我將實際帶你 建立第一個 Odoo 模組 (Hello Odoo Module),從零開始實戰體驗開發流程。


上一篇
Day 7:Odoo 使用者介面導覽與常見操作
下一篇
Day 9:建立第一個 Odoo 模組(Hello Odoo Module)
系列文
用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言