轉載請注明原文地址:https://www.cnblogs.com/ygj0930/p/10826099.html
一:基本字段類型
Binary:二進制類型,用於保存圖片、視頻、文件、附件等,在視圖層顯示為一個文件上傳按鈕。【Odoo底層對該類型字段的容量作了限制,最多能容納20M內容】
Char:字符型,size屬性定義字符串長度。
Boolean:布爾型
Float:浮點型,如 rate = fields.float('Relative Change rate',digits=(12,6)), digits定義數字總長和小數部分的位數。
Integer:整型
Date:短日期,年月日,在view層以日歷選擇框顯示。
Datetime:時間戳。
Text:文本型,多用於多行文本框,可以用widget屬性為它添加樣式。
Html:與text類似,用於多行文本編輯,不過自帶編輯器樣式,並且會把內容以html解析。
Selection:下拉列表,枚舉類型。
二:關聯字段類型
one2one: 一對一關系。
格式為:fields.one2one(關聯對象Name, 字段顯示名, ... )。在V5.0以后的版本中不建議使用,而是用many2one替代。
many2one: 多對一關系,格式為:fields.many2one(關聯對象Name, 字段顯示名, ... )。可選參數有:ondelete,可選值為"cascade"和"null",缺省值為"null",表示one端的record被刪除后,many端的record是否級聯刪除。
參數列表: comodel_name(string) -- 目標模型名稱,除非是關聯字段否則該參數必選 domain -- 可選,用於在客戶端篩選數據的domain表達式 context -- 可選,用於在客戶端處理時使用 ondelete -- 當所引用的數據被刪除時采取的操作,取值:'set null', 'restrict', 'cascade' auto_join -- 在搜索該字段時是否自動生成JOIN條件,默認False delegate -- 設置為True時可以通過當前model訪問目標model的字段,與_inherits功能相同
one2many: 一對多關系,格式為:fields.one2many(關聯對象Name, 關聯字段, 字段顯示名, ... ),例:'address'=fields.one2many('res.partner.address', 'partner_id', 'Contacts')。
參數列表: comodel_name -- 目標模型名稱, inverse_name -- 在comodel_name 中對應的Many2one字段 domain -- 可選,用於在客戶端篩選數據的domain表達式 context -- 可選,用於在客戶端處理時使用 auto_join -- 在搜索該字段時是否自動生成JOIN條件,默認False limit(integer) -- 可選,在讀取時限制數量
many2many: 多對多關系。
comodel_name -- 目標模型名稱,除非是關聯字段否則該參數必選 relation -- 關聯的model在數據庫存儲的表名,默認采用comodel_name獲取數據 column1 -- 與relation表記錄相關聯的列名 column2 --與relation表記錄相關聯的列名 domain -- 用於在客戶端篩選數據的domain表達式 context -- 用於在客戶端處理時使用 limit(integer) --在讀取時限制數量
例如:'category_id'=fields.many2many('res.partner.category','res_partner_category_rel','partner_id','category_id','Categories')
表示以多對多關系關聯到對象res.partner.category,關聯表為'res_partner_category_rel',關聯字段為 'partner_id'和'category_id'。當定義上述字段時,OpenERP會自動創建關聯表為 'res_partner_category_rel',它含有關聯字段'partner_id'和'category_id'。
三:引用類型
1:related字段
字段=fields.類型(related="某個字段.類字段",store=true/false)
related字段可以簡記為“帶出字段”,由當前模型的某個關聯類型字段的某個字段帶出值。
2:reference字段
reference是比related更高級的引用字段,可以指定該字段引用那些模型范圍內的模型的哪些字段的值,范圍更廣。
四:Odoo保留字段
- name(Char) -- _rec_name的默認值,在需要用來展示的時候使用
- active(Boolean) -- 設置記錄的全局可見性,當值為False時通過search和list是獲取不到的
- sequence(Integer) -- 可修改的排序,可以在列表視圖里通過拖拽進行排序
- state(Selection) -- 對象的生命周期階段,通過fileds的states屬性使用
- parent_id(Many2one) -- 用來對樹形結構的記錄排序,並激活domain表達式的child_of運算符
- parent_left,parent_right -- 與 _parent_store結合使用,提供更好的樹形結構數據讀取
五:自動化屬性
在模塊安裝后,模塊中的類會自動添加一些屬性,這些屬性是odoo自動化添加與修改的,可以在odoo調試模式下,點擊一個model進行查看。如:

自動化屬性主要有:

對應的數據庫表中也會自動生成這些字段:

如果不想為model自動添加這些屬性,可以在類中通過:

來關閉自動化屬性。
六:Compute字段
compute字段不是一種字段類型,而是指某個字段的值是計算出來的。
一個字段的值,可以通過一個函數來動態計算出來。定義格式如下:
字段名=fields.類型(compute="函數名",store=True/false) #store定義了該動態改變的字段值是否保存到數據庫表中
@api.depends(依賴的字段值)#depend的字段值一旦發生變化,就會觸發該函數,從而更新compute字段值。
def 函數(self):
self.字段=計算字段值
