---
tags: ODOO, 隨手筆記
---
# 隨手筆記 - ODOO 的 Model 繼承模式詳記
## 撰文動機
原本希望可以像 Django 一樣,可以從 A model 關聯 B model 的欄位,關聯到 C model 的欄位,結果發現這個沒辦法在 xml 中實現,只好把 model 這塊的繼承關係學起來了:)
## 繼承模式
在 Odoo 的繼承里總共分成三種模式,以下使用官方提供的圖做解釋。

### 第一種 - 擴充原始 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
## 結語
基本上分成這三種模式,基本上可以適用於目前所有的模式了,只需要按照適合的場景選用不同的方式就好,唯一一個需要小心的就是擴充原本資料表的方式。