odoo資料庫模型,繼承之間的關係

2021-10-10 14:26:46 字數 2925 閱讀 1498

odoo中model中使用_inherit / _inherits屬性簡介

以odoo12環境為例,生產廠家模型為例進行解釋說明。

1.正常使用 「_inherit」 是用於對模型進行繼承修改,常見於如下定義:

class accountmove(models.model):

_inherit = 'account.move'

stock_move_id = fields.many2one('stock.move', string='stock move')

其中使用 「_inherit」 屬性表示對原有模型的繼承修改,這其中不包含 「_name」 屬性。

檢視資料庫欄位會發現對原有表增加新繼承新定義的字段。

2.同時使用 「_inherit」 , 「_name」 或者 同時使用 「_inherits」 , 「_name」 ,

2.1 先看 「_inherit」 , 「_name」 同時存在情況,如下邊**定義:

class stockmanufacturer(models.model):

_name = 『stock.manufacturer』

_description = 『stock manufacturer』

_order = 『id asc』

# 名稱

name = fields.char('manufacturer name', required=true, index=true)

# 編碼

number = fields.char('manufacturer number', index=true, copy=false)

# 型別: 生產廠家、**商

manufacturer_type = fields.selection([('manufacturer', 'manufacturer'), ('agent', 'agent')],

string='manufacturer type', required=true)

# 有效

active = fields.boolean('active', default=true)

# 說明

instructions = fields.char('manufacturer instructions')

# 唯一性約束:檢驗生產廠家編碼是否唯一

_sql_constraints = [

('manufacturer_unique', 'unique (number)', _("manufacturer number already exists !")),

]

class stockmanufacturerson(models.model):

_name = 『stock.manufacturer.son』

_inherit = 『stock.manufacturer』

_description = 『stock manufacturer son』

_order = 『id asc』

son = fields.char('son')

daughter = fields.char('daughter')

可以看到同時使用 「_inherit」 , 「_name」 屬性,這個時候會生成兩張表,分別為stock_manufacture、stock_manufacture_son。其中stock_manufacture_son會繼承stock_manufacture中的字段,並增加自己模型中定義的字段。這種方式就類似與從stock_manufacture複製字段出來加上繼承新增加欄位,組成一張新錶。

注意這個時候操作stock_manufacture_son是不會影響stock_manufacture表中的資料的。

資料庫表截圖如下:

2.2 先看 「_inherits」 , 「_name」 同時存在情況,如下邊**定義:

class stockmanufacturerson(models.model):

_name = 『stock.manufacturer.grandson』

_inherits =

_description = 『stock manufacturer grand son』

_order = 『id asc』

grandson = fields.char('son')

granddaughter = fields.char('daughter')

這裡注意 ,其中**'grand_id』字段作為stock_manufacturer_grandson表與stock_manufacturer_son的關聯字段。這裡的 「_inherits」 也類似與將兩個模型字段結合形成新錶的感覺,但是不同的是stock_manufacturer_grandson表不會儲存stock_manufacturer_son表的字段,而是在odoo模型物件中可以直接通過物件點"."** 的方式直接訪問stock.manufacturer.son物件的資料,其中stock.manufacturer.grandson物件直接操作stock.manufacturer.son物件資料,是會影響stock.manufacturer.son的物件資料的。

資料庫表如下:

SQLAlchemy建立資料庫模型之間的關係

一對多關係,單作者 多文章,外來鍵不可少 外來鍵 foreignkey 總在多的那邊定義,關係 relationship 總在單的那邊定義 class author db.model id db.column db.integer,primary key true name db.column db...

Odoo開發教程15 管理 Odoo 資料庫

前面我們學習了如何通過命令列建立和初始化 odoo 資料庫。管理資料庫還有更多的命令值得我們學習。雖然 odoo 服務可以自動地進行資料庫管理,我們還是可以使用如下命令來手動建立postgresql 資料庫 createdb mydb 更有趣的是,odoo 可以通過 template 引數拷貝已有資...

Oracle資料庫例項 使用者 表 表空間之間關係

資料庫 oracle資料庫是資料的物理儲存。這就包括 資料檔案ora或者dbf 控制檔案 聯機日誌 引數檔案 其實oracle資料庫的概念和其它資料庫不一樣,這裡的資料庫是乙個作業系統只有乙個庫。可以看作是oracle就只有乙個大資料庫。例項 乙個oracle例項 oracle instance 有...