昨天已經先介紹了一部分的欄位屬性,今天會將剩下的部分介紹完,事不疑遲,直接進入正題:
- fields.Many2one:用來創建一個多對一的欄位,一筆資料關聯到另一個model的一筆資料。例如訂單裡的客戶關聯到客戶的主檔。
定義方式:欄位名稱 = fields.Many2one('關聯的model名稱')
範例如下:
partner_id = fields.Many2one('res.partner')
- fields.One2many:用來創建一個一對多的欄位,一筆資料關聯到另一個model的多筆資料,如果建立一個One2many欄位,關聯的model一定要建立一個Many2one的欄位。例如,銷售訂單中,一張訂單可以有多項訂單明細。
定義方式:欄位名稱 = fields.One2many('關聯的model名稱', '關聯model的欄位')
範例如下:
repair_detail = fields.One2many('idx.repair.detail', 'repair_id')
- fields.Many2many:用來創建一個多對多的欄位,使多筆資料關聯到另一個model的多筆資料,建立這種欄位時,資料會記錄在額外新建的model中。例如,一個產品可以有多種標籤,每種標籤也可以包含多種產品。
定義方式:欄位名稱 = fields.Many2Many('關聯的model名稱', '新建立的model', '該欄位所在的tabel的欄位名稱', '被關聯的model的欄位名稱')
tax_ids = fields.Many2many('account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id')
- fields.Binary:用來儲存二進制資料的欄位,例如圖片、檔案等資料。
除了欄位屬性外,還有許多常見的參數在建立欄位時可一併使用:
- string:欄位的顯示名稱。
- help:欄位的額外說明。
- required:指定欄位是否必填。
- readonly:指定欄位是否只能讀,不可修改。
- default:指定欄位的預設值。
- tracking:指定欄位的資料有異動時紀錄log。
- compute:指定欄位是依FUNCTION所計算出來的值,也可使用其他欄位的值來計算該欄位的值。
- store:指定欄位要不要將資料儲存於資料庫中。
- related:指定該欄位依其他關聯欄位的值直接帶出資料。
- index:指定欄位是否增加索引,增加資料庫查詢時的速度。
- copy:指定單據在複製時,欄位的值是否一起複製過去。
- digits:用來指定浮點數欄位的小數點位數。
- domain:用來過濾欄位的值。
- ondelete:用來指定與刪除相關的操作。
下面放幾個範例讓大家參考:
name = fields.Char(string='單號', required=True, tracking=True)
repair_date = fields.Date(string='報修日期', required=True, default=lambda self: fields.Date.today(), tracking=True)
total_amount = fields.Integer(string='總金額', compute='compute_total_amount')
product_id = fields.Many2one('product.product', string='名稱', required=True, tracking=True)
default_code = fields.Char(string='內部編號', related='product_id.default_code')
user_id = fields.Many2one('res.users', 'domain="[('active', '=', 'True')]")