羅列一些Odoo中的字段屬性,基本包含大部分的屬性。
常用字段屬性
平平無奇常用字段屬性
string:字段的標題,在UI視圖標簽中使用。它是可選項,如未設置,會通過首字母大寫及將空格替換成為下划線來從字段名獲取標簽。
required:強制字段在用戶界面中必填,默認為False。
readonly:讓該字段在用戶界面為只讀,默認為False。
index:在設置為True時,為該字段創建一個數據庫索引,有時可供更快搜索使用。
help:在UI提示工具中顯示的解釋性文本。
groups:讓字段僅對安全組可見。它是一個包含安全組的XML ID逗號分隔列表的一個字符串。
store:讓計算字段等原本不保存的數據存儲在數據庫中,設置這個可以使計算字段可被搜索。
copy:標識在復制記錄時是否拷貝字段值。對於非關系型字段和Many2one它的默認值是True,對One2many和計算字段它的值為False。
default
默認值,也可以是一個用於計算默認值的函數,例如default=_compute_default, _compute_default是模型中定義在字段前一個的方法。
related
關聯屬性,將相關的字段變成關聯字段來訪問值;
publisher_id = fields.Many2one("res.partner", string="Publisher", ondelete="set null", index=True) publisher_city = fields.Char(string="Publisher City", related="publisher_id.city")
關聯字段實際上是計算字段。它們僅提供⼀種⽅便的快捷語法來從關聯模型讀取字段值。作為⼀個計算字段,這意味着也可以使⽤store屬性。
states
states允許用戶界面依據state字段的值來動態設置readonly,required和invisible的值。因此,它要求存在一個state字段並在表單視圖中使用(即使是隱藏的)。state屬性的名稱是在odoo硬編碼且無法修改的。
compute
計算字段,默認為只讀,需要定義一個函數以根據情況動態的生成該字段的值。並且該字段默認不能被搜索到。
計算字段在運⾏時動態計算,默認存儲,可設置store=True將計算字段存儲在數據庫,並且此時可被搜索到;ORM使⽤緩存來避免在每次訪問值時的低效重計算。它使⽤@depends裝飾器來監測緩存值何時應置為⽆效並重新計算,因此, 它需要知道所依賴的其它字段。
date_release = fields.Date(string="Release Date") # 計算字段,及讓計算字段可編輯和可搜索 age_days = fields.Float(string="Days Since Release", compute="_compute_age", inverse="_inverse_age", search="_search_age", store=False, compute_sudo=False) # compute_sudo 用於需要提權來執行計算的情況 # 值計算邏輯的方法 @api.depends("date_release") def _compute_age(self): today = fields.Date.today() for book in self.filtered("date_release"): # 篩選有 date_release 的書籍 delta = today - book.date_release book.age_days = delta.days
關於計算字段的可編輯與可搜索可查看我的另一篇文章:odoo之技巧集合一-計算字段的可編輯與可搜索
ondelete
關聯刪除屬性,決定在關聯記錄刪除時執行什么操作。默認值為"set null",所有值如下:
- "set null":會將該字段置為空值;
- "restrice":會阻止關聯字段記錄的刪除;
- "cascade":導致關聯的記錄同樣被刪除;
示例:
partner_id = fields.Many2one("res.partner", ondelete="cascade")
context
上下文屬性,context對關聯字段有效,在點擊字段進入關聯視圖時context會向客戶端上下文添加變量。例如,我們可以使用它來為新紀錄設置通過該視圖創建的默認值。
domain
過濾屬性,對關聯字段有效,用來限制可用的關聯記錄列表的搜索過濾器。
示例:
category_id = fields.Many2one("library.book.category", string="Category", domain=[('id', 'in', ['4', '5', '6'])])
digits
用於Float字段並設置該字段的精度值,精度由總位數和小數位數對來定義。
length = fields.Float(string="長度", digits=(8, 3))。# 總長度為8位,小數位占3位
關聯字段屬性
共有屬性
comodel_name
目標模型標識符,對所有關聯字段強制使用,可以占位定義而無需使用關鍵字;
One2many,Many2many
limit
它在One2many和Many2many中使用,對在用戶界面級別上用於記錄讀取的數量這是可選限制;當設置后,最多只能添加和顯示n條數據。
author_ids = fields.Many2many("res.partner", string="Authors", limit=10)
One2many
inverse_name
它僅應用於One2many,是反向Many2one關聯的目標模型中的字段名;
Many2many
- relation:用於Many2many字段。many2many關聯表的名稱默認使用兩個關聯模型名按字母排序加上一個_rel后綴來創建。但我們可以使用relation屬性來進行覆蓋。
- column1:這是連接這個模型的關聯表中的Many2one字段的名稱
- column2:這是在關聯數據表中連接comodel的Many2one字段的名稱
其他字段屬性
其他較少使用的字段
translate
在設置為True時,讓字段可翻譯,它可根據用戶的界面語言保持不同值。
company_dependent
讓該字段根據公司存儲不同值。
strip_style
和sanitize配合使用,見下個屬性。
sanitize
用於Html字段並去除包含不安全標簽的內容。使用它會對輸入進行全局清理。如果需要更精細的控制,可以使用一些關鍵字,僅在啟用sanitize時生效。
- sanitize_tags=True刪除⽩名單列表以外的標簽(默認項)
- sanitize_attributes=True刪除⽩名單列表以外的標簽屬性
- sanitize_style=True刪除⽩名單列表以外的樣式屬性
- strip_style=True刪除所有樣式元素
- strip_class=True刪除所有class屬性
這⾥所提及的各個⽩名單列表在odoo/tools/mail.py中定義。