多對多欄位,書有很多本,但作者不只有一個。
class BookName(models.Model):
_name = 'book.name'
_description = "book's name model"
name = fields.Char(string='Name', required=True)
author = fields.Many2many('author', 'author_book_name_tag',
'book_name', 'author_name',string='Author')
在使用Many2many
欄位時,odoo會在DB中生成一個新Table,用來記錄book_name
與author_name
的關聯,在上面所舉的例子中,會發現多對多欄位有好幾個屬性,分別是author
(關聯的Model)、author_book_name_tag
(我們自訂的Table名稱)、booke_id
(BookName所對應的欄位)、author
(Author所對應的欄位),在這當中如果我們沒有設定Tabel名與對應的欄位,odoo也會自動生成Table的名稱就會是BookName_author_rel
、欄位則是book_id
、 author_id
。
Many2many
的parameter:
comodel_name
(必填):這是與當前模型建立多對多關係的目標模型的名稱,它是一個字符串,例如
表示當前模型的記錄可以與 author
模型的記錄建立多對多關聯。
relation
:這是用於存儲多對多關係的中間表的名稱。如果不指定,Odoo將自動生成一個中間表。通常情況下,您不
需要指定這個參數。
string
:這是字段的可選標籤,通常是一個人類可讀的字符串,用於界面上顯示字段的標籤。
required
:一個布爾值,指定字段是否為必填字段。如果設置為True
,用戶必須為這個字段提供值。
readonly
:一個布爾值,指定字段是否為只讀字段。如果設置為True
,則該字段將只能查看,不能編輯。
ondelete
:指定當目標記錄被刪除時,如何處理關聯的記錄。常見的值包括 set null
(將關聯字段設置為空)和 cascade
(刪除關聯的記錄)。
domain
:一個選擇器函數或域列表,用於篩選可選擇的目標記錄。
context
:一個字典,用於設置與這個字段相關的上下文,可以在計算字段值時使用。
help
:一個字符串,用於提供有關字段用途的說明。
index
:一個布爾值,指定是否在該字段上建立數據庫索引。通常在大型數據集上查詢這個字段時使用。
limit
:一個整數,限制可選擇的目標記錄的數量。如果設置了限制,用戶將無法選擇超過限制數量的目標記錄。
使用Many2many
欄位,常用到的程度其實跟Many2one
差不多,不過使用上還是需要依照情境去選擇的。