odoo欄位屬性列舉

YifChan發表於2021-05-06

羅列一些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

  1. relation:用於Many2many欄位。many2many關聯表的名稱預設使用兩個關聯模型名按字母排序加上一個_rel字尾來建立。但我們可以使用relation屬性來進行覆蓋。
  2. column1:這是連線這個模型的關聯表中的Many2one欄位的名稱
  3. 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中定義。

 

相關文章