Odoo模塊開發教程2-模塊繼承之原模型繼承

原模型繼承

第一步我們來爲 Book 模型添加 is_available 布爾型字段。這裏使用經典的 in-place 模型繼承。該字段值可通過圖書借出和歸還記錄自動計算,但現在我們先使用普通字段。要繼承已有模型,需要在 Python 類中添加一個_inherit 屬性來標明所繼承的模型。新類繼承父 Odoo 模型的所有功能,僅需在其中聲明要做的修改。在任何地方使用該模型修改都可用,可以認爲這類繼承是對已有模型的引用並在原處做了一些修改

爲模型添加字段

通過 Python 類來新建模型,繼承模型同樣是通過 Python 以及 Odoo 自有的繼承機制,即_inherit 類屬性。該屬性標明所繼承的模型。新的類繼承父 Odoo 模型的所有功能,僅需聲明要做修改的部分。編碼指南推薦爲每個模型創建一個 Python 文件,因此我們添加
library_member/models/library_book.py 文件來繼承原模型,首先創建__init__.py 文件來導入該文件:
1、 添加 library_member/__init__.py 文件來導入 models 子文件夾:
from . import models
2、添加 library_member/models/__init__.py 文件子文件夾中的代碼文件:
from . import library_book
3、創建 library_member/models/library_book.py 文件來繼承 library.book 模型:
from odoo import fields, models
class Book(models.Model):
_inherit = 'library.book'
is_available = fields.Boolean('Is Available?')
使用_inherit 類屬性來聲明所繼承模型。注意我們並沒有使用到其它類屬性,甚至是_name 也沒使用。 除非想要做出修改,否則不需要使用這些屬性。
“ 小貼士: _name 是模型標識符,如果修改會發生什麼呢?其實你可以修改,這時它會創建所繼承模型的拷貝,成爲一個新模型。這叫作原型繼承,本文後面會討論。 ”
可以把這個想成是對模型定義的一個引用,在原處做了一個修改。可以添加字段、修改已有字段、修改模型類屬性甚至是包含業務邏輯的方法。要在數據表中添加新的模型字段需要安裝該模塊。如果一切順利,通過 Settings > Technical > Database Structure > Models 菜單查看library.book 模型即可看到該字段。
~/odoo-dev/odoo/odoo-bin -d dev12 -i library_member

修改已有字段

通過上面部分可以看到向已有模型添加新字段非常簡單。有時還要對已有字段進行修改,也非常
簡單。在繼承模型時,可對已有字段疊加修改,也就是說僅需定義要增加或修改的字段屬性。
我們將對原來創建的 library_app 模塊的 Book 模型做兩處簡單修改:
⚫ 爲 isbn 字段添加一條提示,說明同時支持 10 位數的 ISBN(稍後會實現該功能)
⚫ 爲 publisher_id 字段添加數據庫索引,以提升搜索效率
編輯 library_member/models/library_book.py 文件,並在 library.book 模型中添加如下代碼:
class Book(models.Model):
...
isbn = fields.Char(help="Use a valid ISBN-13 or ISBN-10.")
publisher_id = fields.Many2one(index=True)
這會對字段進行指定屬性修改,未涉及的屬性不會被修改。升級模塊,進入圖書表單,將鼠標懸停在 ISBN 字段上,就可以看到所添加的提示信息了。 index=True 這一修改不太容易發現,通過Settings > Technical > Database Structure > Models 菜單下的字段定義中可進行查看。

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

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