Odoo模塊開發教程3-模塊繼承之修改視圖和數據第三講

其它模型繼承機制

前面我們介紹了模型的基本繼承,在官方文檔中稱爲經典繼承。這是最常用的繼承方式,最容易
想到的就是 in-place 繼承。獲取模型並對其繼承。添加的新功能會自動添加到已有模型中,而不會創建新模型。可以爲_inherit 屬性傳入多個值來繼承多個父模型。大多數情況下這通過 mixin 類完成,mixin 類是實現可複用的通用功能。也可以像普通模型那樣獨立使用,像是一個功能容器,可隨時加到其它模型中。
如在使用_inherit 屬性的同時還使用了與父模型不同的_name 屬性,此時會複用所繼承並創建一個新的模型,並帶有自己的數據表和數據。官方文檔稱其爲原型(prototype)繼承。下面我們會拿一個模型,併爲其創建一個拷貝。在添加新功能時,只會被加到新模型中,而不會變更原模型。此外還有代理(delegation)繼承,通過_inherits 屬性來使用(注意最後有一個 s)。這允許我們創建一個包含和繼承已有模型的新模型。新模型創建新記錄時,在原模型中也會被創建並使用many-to-one 字段關聯。查看新模型的人可以看到所有原模型和新模型中的字段,但在後臺兩個模型分別處理各自的數據。下面我們一起來了解詳情。

使用原型繼承拷貝功能

前文我們繼承模型時使用了_inherit 屬性,創建一個類繼承 library.book 並添加了一些功能。類中沒有使用_name 屬性,不指明即使用 library.book。如果設置了不個不同值的_name 屬性,會通過從所繼承的模型拷貝功能創建新模型。
在實際開發中,這類繼承一般通過抽象 mixin 類,很少這樣直接繼承普通模型,因爲這樣會創建冗餘的數據結構。 Odoo 還有一種代理繼承機制可避免這類數據結構冗餘,所以普通模型通常會使用這種方法來做繼承。

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

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