星輝Odoo模型開發教程2-模型創建第二講

模型和 Python 類

Odoo 模型以 Python 類的形式展現,在前面的代碼中,有一個繼承了 models.Model 類的Python 類: Book,創建了新 Odoo 模型: library.book。 Odoo 的模型保存在中央註冊表
(central registry)中,可通過 env 環境對象(老 API 中稱爲 pool)獲取。 它是一個數據庫保存所有可用模型類引用的字典,其中的詞條可通過模型名引用 。具體來說,模型方法中的代碼可使用self.env[‘library.book’ ]來獲取表示 library.book 模型的模型類。
可以看出模型名非常重要,因爲它是訪問該註冊表的關鍵。模型名的規則是以點號連接的小寫單詞,如 library.book 或 library.book.category。內核模塊中的其它示例有 project.project,project.task 和 project.task.type。模型名應使用單數,如 library.book 而非 library.books。
“ 小貼士: 由於歷史原因,有些內核模型沒有遵循這一規則,如 res.users。 ”模型名必須全局唯一,因此第一個單詞應使用模塊關聯的主應用對應,以圖書應用而言,模型名前綴使用 library。其它示例如內核模塊的 project, crm 和 sale。另一方面 Python 類僅爲所聲明文件本地內容,名稱僅需在代碼文件中唯一即可。因爲類名不會與其它模塊中的類產生衝突,也
就不需爲其添加主應用相關的前綴。
類的命名規範是使用駝峯命名法(CamelCase),這與 Python 標準的 PEP8 編碼規範一致。

臨時(Transient)模型和抽象模型

在前述代碼中以及在大多數據 Odoo 模型中的類會繼承 models.Model 類。這類模型在數據庫中持久化存儲:會爲模型創建數據表並存儲記錄直至刪除。但 Odoo 中還有另外兩種模型類型:
臨時模型和抽象模型。
臨時模型繼承 models.TransientModel 類,用於嚮導式的用戶交互。這類數據會存儲在數據庫中,但僅是臨時性的。會定時運行清空 job 來清除這些表中的老數據。比如 Settings >
Translations 菜單下的 Load a Language 對話窗口,就使用了臨時模型來存儲用戶選擇並實現嚮導邏輯。在第八章業務邏輯中會有討論臨時模型的示例。
抽象模型繼承 models.AbstractModel 類,它不帶有數據存儲。抽象模型用作可複用的功能集,與使用 Odoo 繼承功能的其它模型配合使用。例如 mail.thread 是 Discuss 應用中的一個抽象模型,用於爲其它模型添加消息和 follower 功能。

檢查已有模型

通過 Python 類創建的模型和字段在用戶界面中有自己的元標籤。啓動開發者模式,訪問菜單
Settings > Technical > Database Structure > Models,這裏有數據庫中的所有模型。點擊列表中的模型會打開詳情表單,
這是一個檢查模型結構很好的工具,因爲在這裏可以看到不同模塊所有自定義結果。上圖中在右上角 In Apps 字段中可以看到 library.book 模型的定義來自 library_app 和 library_member 兩
個模塊。下方區域中還有幾個包含附加信息的標籤:
⚫ Fields 可快速查看模型字段
⚫ Access Rights 是授予不同權限組的訪問控制規則
⚫ Views 顯示模型所帶的視圖列表
我們可以通過開發者菜單下的 View Metadata 選項查看模型的外部標識符。模型的外部標識符或 XML ID 由 ORM 自動生成,但根據規則可預知,如 library.book 模型的外部標識符爲
model_library_book。在定義安全訪問控制列表經常在 CSV 文件中使用到這些 XML ID。
“ 小貼士: 如第一章 使用開發者模式快速入門 Odoo 12 中所見,模型表單是可編輯的。通過這裏是可以創建並修改模型、字段和視圖的。可在此處創建原型然後在插件模塊中實現。 ”

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

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