Odoo常見欄位
odoo中的常用欄位,沒有其他花哨的操作,
- Char:Char用于字串
- Text:Text用于多行字串值
- Html:類似于Text的多選字串值,但通常用于以HTML格式存盤的富文本
- Boolean:Boolean存盤布林值,True/False,
- Integer:Integer欄位存盤整型值,
- Binary:Binary欄位存盤二進制檔案,例如影像或檔案,
Selection
Selection用于選擇串列,這是一個包含多個集合(每個集合中包含一個值和一個描述)的串列,所選擇的值存盤于資料庫中,可以是字串或整數,
Selection可以使用整型的健,但應注意odoo內部將0解釋為未設定,不會顯示存盤值為0的描述,
Selection欄位還接收一個函式參考來替代串列作為selection屬性,這允許動態生成選項串列,
正常使用示例
state = fields.Selection([("draft", "草稿"), ("to_audit", "待審核"), ("audited", "已審核")], default="draft", string="狀態")
動態生成選項串列示例
def gnrt_score(self): score_list = [] for i in range(1, 11): score_list.append((str(i), str(i))) return score_list score = fields.Selection(selection="gnrt_score", string="評分", help="評分應在1-10之間")
Float
Float欄位存盤浮點型數值,精度可由位數和小數位位數對來定義,
length = fields.Float(string="長度", digits=(8, 3)),# 總長度為8位,小數位占3位
用戶可以自定義浮點欄位的精度,具體方法可參考我的另一篇博客:odoo之技巧合集一-使用可配置精度的浮點欄位
Monetary
Monetary欄位可存盤某個幣種的數量值,
使用示例
currency_id = fields.Many2one("res.currency", string="Currency") retail_price = fields.Monetary(string="Retail Price", currency_field='currency_id') <field name="currency_id" /> <field name="retail_price" />
Reference
參考欄位,可以實作讓用戶自定義要參考的模型和記錄,
@api.model # 在模型級別而不是記錄集級別上進行操作 def _referencable_models(self): models = self.env['ir.model'].search([]) print("models:", models) return [(x.model, x.name) for x in models] ref_doc_id = fields.Reference(selection='_referencable_models', string="Reference Document")
Date
Date存盤日期值,它在資料庫中以日期進行存盤,ORM中以Python date物件的形式對其進行處理,所使用的格式在odoo.fields.DATE_FORMATE中定義,
Date欄位物件的一些非常方便的工具方法:
- fields.Date.to_date(string_value將字串決議為?個date物件,
- fields.Date.to_string(date_value)將Date物件表示為字串,
- fields.Date.today()以字串格式回傳當前?期,這適合?于默認值,
- fields.Date.context_today(record, timestamp)根據記錄(或記錄集)上下?的時區以 字串格式回傳時間戳的?期(或者在省略時間戳時回傳當天),
Datetime
Datetime欄位用于日期時間值,在資料庫中以原生UTC時間datetime進行存盤,ORM中以Python datetime物件的形式對其進行處理,所使用的格式在odoo.field.DATETIME_FORMATE中定義,
Datetime欄位物件的一些非常方便的工具方法:
- fields.Datetime.to_datetime(string_value)將字串決議為datetime物件,
- fields.Datetime.to_string(datetime_value)將datetime物件表示為字串,
- fields.Datetime.now()以字串格式回傳當天及當前時間,它適合?作默認值,
- fields.Datetime.context_timestamp(record, timestamp)將時間戳原?datetime按照記 錄上下?的時區轉化為對應時區,它不適合?作默認值,但是在向外部系統發送資料等 操作時可以使?,
多對多欄位
Many2one
多對一欄位,Many-to-one欄位向模型的資料表中添加了?列,存盤關聯記錄的資料庫ID,在資料庫級別
上,還會創建外鍵約束,確保保存的ID是對關聯表中記錄的有效引? ,對這些關聯欄位不會 創建資料庫索引,但這可通過添加 index=True 屬性來進?完成,
publisher_id = fields.Many2one("res.partner", string="Publisher", ondelete="set null", context={}, domain=[], index=True)
One2many
一對多欄位,One-to-many欄位是many-to-one的反向關聯,雖然one2many欄位像其它欄位?樣添加在模型中,但在資料庫中并沒有實際的體現,他們僅是編程捷徑,啟?資料庫視圖來展現這些關聯記錄串列,
published_book_ids = fields.One2many("library.book", "publisher_id", string="Published Book")
Many2many
多對多欄位,Many-to-many關聯也不會向模型資料表添加列,這類關聯在資料庫中使?中間關聯表進? 體現,其中有兩列分別存盤這兩個關聯的ID,
Odoo?動處理這?關聯表的創建,關聯表的名稱默認使?兩個關聯模型名按字?排序加上?
個_rel后綴來創建,但我們可以使?relation屬性來進?覆寫,
authored_book_ids = fields.Many2many("library.book", relation="author_book_rel", column1="authored_book_ids",
column2="author_ids", string="authored books")
column1:這是連接這個模型的關聯表中的Many2one欄位的名稱
column2:這是在關聯資料表中連接comodel的Many2one欄位的名稱
Odoo默認添加欄位與特殊欄位
Odoo默認添加欄位
有些欄位在odoo模型中默認添加,因此我們不應在欄位中使用這些名稱,這些是記錄自動生成的識別符號的id欄位以及一些審計日志欄位,如下所示:
- create_date是記錄創建的時間戳
- create_uid是創建該記錄的?戶
- write_date是最近記錄的編輯時間戳
- write_uid是最后編輯記錄的?戶
這些?志欄位的?動創建可通過設定模型屬性_log_access=False來進?禁?,
特殊欄位:active
它應是布爾型欄位,允許?將記錄標記為?活躍 (inactive),它的定義如下:
active = fields.Boolean('Active', default=True)
默認只有將active設定為True的記錄才可?,要獲取隱藏欄位,我們需要使?域過濾器[(‘activ e’, ‘=’, False)],?如果向環境上下?添加了’active_test’: False 值,ORM則不會過濾掉?活躍記錄,
在有些情況下,你可能不能修改上下?來獲取活躍及?活躍記錄,這時,可以使? [‘|’, (‘active’, ‘=’, True), (‘active’, ‘=’, False)] 域, 注意:[(‘active’, ‘in’ (True, False))]可能不會如你所預期那樣,Odoo在域中顯式地查找(‘active’, ‘=’, False)陳述句,它默認會限制僅搜索活躍記錄,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270622.html
標籤:Python
上一篇:Python模擬隨機漫步
