odoo字段屬性列舉


羅列一些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中定義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM