--- tags: ODOO, 隨手筆記 --- # 隨手筆記 - ODOO 的 Model 繼承模式詳記 ## 撰文動機 原本希望可以像 Django 一樣,可以從 A model 關聯 B model 的欄位,關聯到 C model 的欄位,結果發現這個沒辦法在 xml 中實現,只好把 model 這塊的繼承關係學起來了:) ## 繼承模式 在 Odoo 的繼承里總共分成三種模式,以下使用官方提供的圖做解釋。 ![](https://i.imgur.com/5NfPZNV.png) ### 第一種 - 擴充原始 Model (直接擴充) sample: ```python class OriginModel(models.Model): _name = "<original_model_id>" _inherit = "<original_model_id>" ``` 用處: - 直接在原本的資料表中擴充欄位。 - 需要用到該 Model 本來的 View。 - 需要存取原 Model 的原始資料 ### 第二種 - 擴充原始 Model (關聯擴充) sample: ```python class NewModel(models.Model): _name = "<new_model_id>" _inherit = "<original_model_id>" ``` 用處: - 不想影響到原本的資料表及欄位。 - 不需用到原本 Model 的 View。 ### 第三種 - 多重繼承 Model sample: ```python class NewModel(models.Model): _name = "<new_model_id>" _inherits = {"<original_model_id_1>":"<field_id_1>"}, {"<original_model_id_2>":"<field_id_2>"}, ... ``` 用處: - 不想影響原本的資料表,但需要原 Model 的資料 - 需要繼承多個既有的 Model ## 結語 基本上分成這三種模式,基本上可以適用於目前所有的模式了,只需要按照適合的場景選用不同的方式就好,唯一一個需要小心的就是擴充原本資料表的方式。