Odoo中的模型
轉載請註明原文地址:https://www.cnblogs.com/cnodoo/p/9280164.html
【Odoo中,一切皆模型,連視圖都是模型。Odoo將各種數據,如:權限數據、類數據、視圖數據等,按照模型分表存儲,然後在查看時,按照索引從各個表格讀取信息,組合成我們看到的內容。】
一:模型的屬性
模型內置屬性:可以使用一些內置屬性來定義模型的一些特性:
_name :創建odoo模型的內部標識符,必含項。
_description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。
_order :當瀏覽模型記錄或者顯示在列表視圖時,設置默認順序。
_rec_name:用來指出引用關聯字描述記錄的字段,例如多對一關系。 默認情況下,它使用name字段,這是模型中常見的字段。但是這個屬性允許我們使用任何其他字段來實現這個目的。【不過我們一般使用_name_get()函數來重寫name字段的獲取邏輯,手動拼裝在關聯字段顯示出的描述性名稱。】
_table:用來支持模型的數據庫表名。通常,它是左自動計算,是下劃線取代點的模型名稱,但也可以設置特定的表名。
_inherit :繼承。
_inherits :委托繼承。
二:模型對象的獲取
Odoo模型被保存在一個中央註冊中心,它可以引用實例中可用的所有模型類,並且它可以被一個模型名引用。在我們編寫的模型方法代碼中,可以通過 self.env[‘x‘] 獲取一個代表model x的類的引用。(相當於spring托管對象)
模型名稱很重要,因為它們是用於訪問註冊中心的。模型名稱的約定規則:用點分隔的小寫字母列表。
模型名稱必須是全局唯一的,通常與模塊名相關。
三:Odoo中的三種模型
1:基本模型models.Model
絕大多數Odoo模型中,類都是基於models.Model類的。 這種類型的模型具有永久的數據庫持久性:為它們創建數據庫表,並且它們的記錄被存儲,直到被顯式刪除。
2:瞬態模型models.TransientModel
通常用於向導。 它們的數據仍然存儲在數據庫中,但是臨時的,一個清理作業定期從這些表中清除舊數據。
3:抽象模型models.AbstractModel
不存儲數據,不會在數據庫創建表。 抽象模型作為可重用的功能集,利用Odoo的繼承功能,混入到其他模型。通常用於定義接口或者用作報表模型。
四:模型之間的關系
命名字段時,有以下約定:以_id、_ids為結尾命名的字段,分別對應的是2one和2many的關系。
Odoo中的模型