iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Odoo

Odoo開發系列 第 5

[Day 5] odoo14 - 建立基本model及欄位(二)

  • 分享至 

  • xImage
  •  

昨天已經先介紹了一部分的欄位屬性,今天會將剩下的部分介紹完,事不疑遲,直接進入正題:

  • 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')]")

上一篇
[Day 4] odoo14 - 建立基本model及欄位(一)
下一篇
[Day 6] odoo14 - Security(權限)介紹
系列文
Odoo開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言