在odoo中,其實並沒有One2many
的專屬欄位,它只是反向Many2one
,所以想使用One2many
必須要有對應的Many2one
。
class BookName(models.Model):
_name = 'book.name'
_description = "book's name model"
name = fields.Char(string='Name', required=True)
book_id = fields.Many2one('category', string='Category', required=True)
class Category(models.Model):
_name = 'category'
_description = "category's model"
name = fields.Char(string='Name', required=True)
category_id = fields.One2many('book.name', 'book_id', string='Book's Name ID')
在使用One2many
時,我們必須要確認再Many2one
中有相對應的欄位才能夠使用。
首先我們先參考上上節的Many2one
,我們將使用book_id
這個欄位來時做One2many
。
我們在Modelcategory
創建欄位category_id
,宣告其為關聯欄位One2many
,設定所對應的model與
其中對應的欄位名稱,這樣就設定完成了。
在DB中我們可以發現,TableCategory
並沒有category_id
這個欄位,因為它是使用book_id
邏輯生成的。
One2many
的parameter:
comodel_name
: 必填參數,它是與當前模型相關聯的模型的名稱。這是一個字符串,應該是相關模型的技術名稱。
inverse_name
: 必填參數,它是與相關模型相關聯的反向關聯字段的名稱。這告訴Odoo如何在相關模型中建立反向關聯。
string
: 可選參數,用於指定在Odoo中顯示的字段標籤(標籤)。
除了上面列出的基本參數,One2many 字段還支持其他可選參數,例如:
domain
: 用於定義一個過濾條件,以限制與當前記錄相關聯的記錄。它是一個包含Odoo域表達式的字符串。
context
: 用於設定上下文(context)字典,以在與當前記錄相關聯的記錄上傳遞附加信息。
limit
: 用於設定與當前記錄相關聯的記錄的最大數量。
auto_join
: 布爾值,用於指示是否自動加入related.model.name
中的其他一對多字段。如果設置為True
,則Odoo將自動加入相關模型中的其他一對多字段。
help
: 字段的幫助提示,用於提供有關字段用途的描述。
在這邊我們發現在One2many
的屬性中並沒有ondelete
,這就是前面提到的,它是反向的Many2one
所以想要對它設定ondelete
只能透過設定對應的欄位來實現。