iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Odoo

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

Day 10:Odoo ORM 基礎:Models 與 Fields

  • 分享至 

  • xImage
  •  

在前一篇我們完成了第一個模組 Hello Odoo,體驗了建立 Model 與 View 的完整流程。今天要更深入地認識 Odoo 的 ORM(Object Relational Mapping),尤其是其中的核心元素 Models 與 Fields。這是 Odoo 開發的基石,理解它們能讓你更靈活地定義資料結構與商業邏輯。


1. Odoo ORM 概念

ORM(物件關聯映射)是 Odoo 與資料庫互動的核心。開發者只需要撰寫 Python 類別,就能操作 PostgreSQL 資料表。

  • 每個 Model 對應一張資料表。
  • 每個 Field 對應一個欄位。
  • ORM 負責轉換 Python 物件 ↔ SQL 指令,讓開發者不必直接寫 SQL。

2. 定義 Model

要建立新的 Model,只需繼承 models.Model 並指定 _name
範例:

from odoo import models, fields

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

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

這段程式會在資料庫中建立一張名為 library_book 的表格,並包含三個欄位。


3. 欄位型別(Fields)

Odoo 提供多種欄位型別,用來表達不同的資料結構:

  • 基本型別

    • Char:字串
    • Text:長文字
    • Integer:整數
    • Float:浮點數
    • Boolean:布林值
    • Date / Datetime:日期與時間
  • 關聯型別

    • Many2one:多對一(常用於外鍵)
    • One2many:一對多
    • Many2many:多對多

範例:

class LibraryMember(models.Model):
    _name = 'library.member'
    _description = 'Library Member'

    name = fields.Char('Member Name', required=True)
    join_date = fields.Date('Join Date')
    active = fields.Boolean('Active', default=True)
    books_borrowed = fields.One2many('library.book', 'member_id', string='Borrowed Books')

4. 欄位屬性

在定義欄位時,可以透過屬性控制行為:

  • required=True:必填欄位
  • default=value:設定預設值
  • readonly=True:唯讀
  • help="...":顯示說明提示
  • index=True:建立索引,加速查詢

範例:

price = fields.Float('Price', required=True, default=0.0, help="Book price in USD")

5. ORM 操作

ORM 提供一系列方法操作資料:

  • 建立紀錄self.env['library.book'].create({'name': 'Odoo Basics'})
  • 查詢紀錄self.env['library.book'].search([('author', '=', 'Tom')])
  • 更新紀錄book.write({'price': 200})
  • 刪除紀錄book.unlink()

這些方法讓開發者能以 Python 物件的方式操作資料,而不用直接寫 SQL。


小結

Odoo 的 ORM 提供了高度抽象化的資料處理方式:

  • Models 定義資料結構與邏輯。
  • Fields 建立多樣化的欄位,包含基本型別與關聯。
  • ORM API 提供直觀的查詢與操作方法。

掌握這些基礎後,你就能開始建立更完整的資料模型。下一篇,我將帶你認識 Odoo Views(XML/QWeb)的定義與設計,把資料呈現給使用者。


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

尚未有邦友留言

立即登入留言