在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只能透過設定對應的欄位來實現。