在前一篇我們完成了第一個模組 Hello Odoo
,體驗了建立 Model 與 View 的完整流程。今天要更深入地認識 Odoo 的 ORM(Object Relational Mapping),尤其是其中的核心元素 Models 與 Fields。這是 Odoo 開發的基石,理解它們能讓你更靈活地定義資料結構與商業邏輯。
ORM(物件關聯映射)是 Odoo 與資料庫互動的核心。開發者只需要撰寫 Python 類別,就能操作 PostgreSQL 資料表。
要建立新的 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 的表格,並包含三個欄位。
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')
在定義欄位時,可以透過屬性控制行為:
required=True
:必填欄位default=value
:設定預設值readonly=True
:唯讀help="..."
:顯示說明提示index=True
:建立索引,加速查詢範例:
price = fields.Float('Price', required=True, default=0.0, help="Book price in USD")
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 提供了高度抽象化的資料處理方式:
掌握這些基礎後,你就能開始建立更完整的資料模型。下一篇,我將帶你認識 Odoo Views(XML/QWeb)的定義與設計,把資料呈現給使用者。