在 Odoo 中,特别是在处理一对多(One2many
)或多对多(Many2many
)的关系时,可以使用特定的命令来快速处理主从关系。这些命令在 Odoo 的 ORM 中被称为特殊标记操作符,常用于 write
和 create
方法中,帮助你有效地更新记录。
以下是 Odoo 14 中常用的主从关系处理操作符:
(0, 0, {values})
这个命令用于在主记录的关联字段上创建一个新记录。例如,当你想要在一个 One2many
或 Many2many
字段中添加新记录时,可以使用这个命令。
示例:
record.write({ 'line_ids': [(0, 0, {'name': 'New Line', 'amount': 100})] })
上述代码会在 line_ids
关联字段中创建一个新的记录,并设置其 name
和 amount
字段。
(1, id, {values})
这个命令用于更新已有的关联记录。id
是你想要更新的记录的 ID,而 {values}
是你要更新的字段和值。
示例:
record.write({ 'line_ids': [(1, line_id, {'name': 'Updated Line', 'amount': 200})] })
这将更新 line_ids
关联字段中 ID 为 line_id
的记录。
(2, id, _)
这个命令用于删除与主记录关联的记录。注意,这个操作会从数据库中永久删除记录。
示例:
record.write({ 'line_ids': [(2, line_id)] })
这会删除 line_ids
字段中 ID 为 line_id
的记录。
(3, id, _)
这个命令用于取消与主记录的关联,但不会删除关联的记录本身。通常用于 Many2many
关系。
示例:
record.write({ 'tags_ids': [(3, tag_id)] })
这会在 tags_ids
字段中取消与 ID 为 tag_id
的记录的关联,但不会删除该记录。
(4, id, _)
这个命令用于在 Many2many
字段中添加现有记录的 ID。
示例:
record.write({ 'tags_ids': [(4, tag_id)] })
这会将 ID 为 tag_id
的现有记录添加到 tags_ids
字段。
(5, _, _)
这个命令用于清空所有与主记录相关的 One2many
或 Many2many
记录。它将解除所有的关联。
示例:
record.write({ 'tags_ids': [(5, 0, 0)] })
这会清空 tags_ids
字段中的所有关联。
(6, _, [ids])
这个命令用于将 Many2many
字段设置为特定的一组记录。它用一个 ID 列表来替换所有现有的关联。
示例:
record.write({ 'tags_ids': [(6, 0, [tag_id1, tag_id2])] })
这会将 tags_ids
字段设置为仅包含 ID 为 tag_id1
和 tag_id2
的记录。
总结
这些操作符使得在 Odoo 中处理关系字段变得非常灵活和高效,可以根据具体需求对关联记录进行创建、更新、删除、解除关联或重设关联。选择合适的操作符能够有效地简化业务逻辑的实现。