Odoo 18 中的自动字段和预留字段
Odoo 18 中的自动字段和预留字段
作为一个开源平台,Odoo 的价值在于其使用和开发的灵活性、可扩展性和经济性。虽然 Odoo 本身主要用 Python 和 JavaScript 编写,但其作为开源 ERP 系统的价值超越了特定编程语言的范畴,为各行各业的企业提供了可定制且适应性强的运营管理解决方案。
在探讨 Odoo 18 模块开发时,字段是模型的基本构建块,代表着系统中存储的数据。这些字段定义了 Odoo 模型(对应数据库中的表)的数据结构,并用于创建表单、视图和管理业务逻辑。实际上,字段是指映射类的属性或特性,对应于数据库表中的列。
在 Odoo 18 中,自动字段(Automatic Fields) 和 预留字段(Reserved Fields) 指的是系统为实现各类功能而在内部进行管理的字段。这些字段通常不由开发者或用户显式创建,而是由 Odoo 基于模型定义自动添加,或者是 Odoo 为特定目的预定义的字段。
让我们通过示例详细探讨这两类字段。
1. 自动字段
自动字段是 Odoo 根据模型的需求和配置自动管理或生成的字段。这些字段通常由对象关系映射(ORM)添加,ORM 是编程语言和数据库之间的桥梁。
- id:此自动字段负责为模型中的每条记录提供唯一标识。每条记录都必须包含其唯一的 ID,该 ID 由系统自动管理且永久不变。在启用调试模式后,可以在记录的 URL 中看到 “id ”字段。
- create_date:此字段记录创建时的时间戳,并由系统自动维护。用户无法更改此字段,因为它是自动添加的。
- create_uid:此字段保存创建记录的用户。它是一个 Many2one 字段,关联的模型为 res.users。因此,create_uid 包含创建记录的用户的 ID。
- write_date:此为记录最后一次修改的时间戳字段。write_date 也是一个只读属性,因为只要记录中其他任何字段的值发生变化并保存,系统就会自动更新该值。
- write_uid:此系统字段也是一个 Many2one 字段,关联的模型为 res.users,用于保存最后修改记录的用户的 ID。此字段用于跟踪记录的最新更新,并保留详细信息(例如负责最新更改的用户)。它在审计与调试方面具有重要价值,还可用于实施访问控制,限制特定用户对记录的更新操作。
上述字段会自动添加到每个模型中,便于系统追踪每条记录的创建者与修改者,以及更改发生的时间 - log_access:在 Odoo 中,log_access 是模型层面的一个特殊属性,用于启用或禁用访问元数据的自动记录(例如创建和修改时间戳以及执行这些操作的用户)。默认情况下,Odoo 会为所有模型记录这些数据,但开发者可通过将 “log_access” 设置为 “False” 来禁用该功能。若在创建模型时未禁用 log_access,Odoo 会自动在数据库中添加 create_uid、create_date、write_uid 和 write_date 字段。也就是说,它允许开发者控制是否应为模型自动记录访问元数据(如创建和修改信息)。
2. 保留字段
保留字段是 Odoo 为系统内部特定功能预定义的字段。这些字段通常也由对象关系映射(ORM)添加。保留字段是 Odoo 框架核心操作所需的字段,除非它们服务于相同的角色,否则不能用于其他目的。一些常见的示例包括:
- name:该字段通常默认使用所定义模型的 “_rec_name” 值。name 是跨各种模型最重要且最常用的字段之一。它通常用作模型的主要字符串标识符。当在 Many2one 字段、列表或表单视图中引用记录时,用户看到的就是 “name” 字段的值。
- active:这是一个布尔字段,用于将记录“归档”或“停用”,使用的是 “Odoo.fields.active”。若记录的 “active” 为 “False”,那么在大多数视图和报表中,该记录实际上会被 “隐藏”。“active” 为 “False” 的数据会一直保留在数据库中,用户可按需检索。也就是说,这些数据会一直存于 “回收站”,直至被永久删除。
此字段的定义如下:
active = fields.Boolean(‘Active’, default=True) - company_id:在多公司设置中,此保留字段 company_id 通过将模型中的记录与特定公司关联来发挥作用。这是一个 Many2one 引用字段,关联的模型为 res.company,因此模型中的每条记录只会保存当前已创建公司列表中的某一家公司信息。许多公司使用此字段来实行多公司规则和数据隔离,语法如下:
company_id = fields.Many2one(‘res.company’, string=“Company”, help=‘Company’,default=lambda self: self.env.user.company_id)
·state:state 字段通常用于管理工作流或流程中记录的不同阶段或状态。它通常设置为一个选择字段,其中每个值对应于记录生命周期的不同状态。例如,在销售订单、采购订单和发票等模型中,state 字段可追踪记录从草稿到完成或取消的进度。
示例:
state = fields.Selection([
('draft', 'Draft'),
('confirmed', 'Confirmed'),
('done', 'Done'),
('cancel', 'Cancel')], string='Status', default='draft')
- parent_id:此字段用于创建层级关系。parent_id 字段通常是一个 Many2one 关系,将一条记录链接到同一模型的另一条记录(即自引用)。
- parent_path:在开发具有上述层级关系的 Odoo 模型时,parent_path 字段用于表示记录的完整层次路径。parent_path 字段存储一个字符串,其中包含从顶级父记录到当前记录的完整路径,从而使层级操作(例如搜索特定父记录的所有子记录)更快、更高效。
总结
Odoo 中的自动字段与预留字段,其作用都是在数据库中保存 Odoo 模型记录的元数据。这些字段通常与数据库结构、记录管理和系统操作相关。理解这些字段及其用法将帮助开发者确保自定义内容与 Odoo 框架兼容,从而保持系统的完整性。