Odoo安裝教程10-創建新的插件模塊第九講

模型層

既然 Odoo 已經能識別我們的新模塊了,下面就添加一個簡單的模型。模型描述業務對象,如商機、銷售訂單或合作伙伴(用戶、供應商等)。模型中有一系列屬性,也可定義一些特定業務邏輯。
模型通過 Odoo 模板類派生的 Python 類來實現。它直接與數據庫對象對應, Odoo 在安裝或升級模塊時會自動進行處理。框架中負責這部分的是對象關係映射(ORM -Object Relational Mapping)。
我們的模塊是一個圖書管理應用,第一個功能就是管理圖書目錄,目前這是我們唯一需要實現的模型

創建數據模型

Odoo 開發指南中提到模型的 Python 文件應放在 models 子目錄中,每個模型有一個對應文件。因此我們在 library_app 模塊主目錄下創建 models/library_book.py 文件。
“ 小貼士: Odoo 官方編碼指南請見 Odoo 官網。另一相關的編碼標準文檔爲 OCA 編碼指南。 ”
在使用之前,應告知 Python 所需引用的模型目錄,僅需在模塊主__init__.py 文件添加:
from . import models
要引用所創建的 Python 代碼文件,我們還應添加 models/__init__.py 文件:
from . import library_book
現在我們可以在 models/library_book.py 中加入如下內容:

from odoo import fields, models
class Book(models.Model):
_name = 'library.book'
_description = 'Book'
name = fields.Char('Title', required=True)
isbn = fields.Char('ISBN')
active = fields.Boolean('Active?', default=True)
date_published = fields.Date()
image = fields.Binary('Cover')
publisher_id = fields.Many2one('res.partner', string='Publisher')
author_ids = fields.Many2many('res.partner', string='Authors')

第一行是 Python 代碼導入語句,讓 Odoo 內核的 models 和 fields 對象在這裏可用。緊接着聲明瞭新的模型,它是 models.Model 派生出的一個類。然後_name 屬性定義了 Odoo 全局對該模型引用的標識符。注意 Python 類名 Book 與框架無關, _name 的值纔是模型的標識符。
“ 小貼士: 僅有模型名使用點號(.) 來分割關鍵字,其它如模塊、 XML 標識符、數據表名等都使用下劃線(_)。 ”
注意下面的行都有縮進,對 Python 不熟悉的朋友要知道這很重要:相同縮進代表同一代碼塊,所以下面的行應採用相同縮進。
_description 屬性不是必須的,但爲模型記錄提供了一個用戶友好的名稱,可用作更好的用戶消息。該行之後定義了模型的不同字段 ,值得一提的是 name 和 active 爲特殊字段名。默認在其它模型中引用模型時,會使用 name 字段作爲記錄的標題。active 字段用於激活記錄,默認僅 active 記錄會顯示。對於日期模型這非常有用,隱藏掉那些用戶在日常操作中不再使用的記錄(因歷史原因仍需保留在數據庫中)。在本項目中,用於標識圖書是否可用。
再來看看其它字段, date_published 是一個圖書出版日的日期字段, image 是一個存儲圖書封面的二進制字段。還有一些關聯字段: publisher_id 是一個出版公司多對一關聯, author_ids 是作者多對多關聯。都是圖書與 partner 模型的關聯, partner 模型內置於 Odoo 框架中,用戶、公司和地址都存儲在這裏。我們使用它存儲出版商和作者。字段就是這些,要使代碼修改生效,需更新模塊來觸發數據庫中相應對象的創建。菜單中還無法訪問這一模型,因爲我們還沒有添加。不過可以通過 Technical 菜單來檢查新建模型。訪問Settings > Technical > Database Structure > Models(需開啓開發者模式),在列表中搜索library.book,然後點擊查看模型定義:如查看一切順利,說明模型和字段都被正常創建,如果你看不到這些,嘗試重啓服務升級模型。我們還可以看到些未聲明的字段,這些是 Odoo 自動爲新模型添加的保留字段,這些字段有:
⚫ id 是模型中每條記錄的唯一數字標識符
⚫ create_date 和 create_uid 分別爲記錄創建時間和創建者
⚫ display_name 爲所使用的記錄提供文本顯示,如其它記錄引用它,它就會被計算並默認使用
name 字段中的文本
⚫ write_date 和 write_uid 分別表示最後修改時間和修改者
⚫ __last_update 是一個助手字段 ,它不存儲在數據庫,用於做併發檢測

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章