ODOO模型对应了数据库中的表,是数据库表的映射,通过模型可以方便的操作数据库,避免了传统的通过SQL进行操作,虽然底层也是SQL,但以面向对象的方式进行数据访更有利用工程化,除此,ODOO还能自动创建更新数据库表及字段、约束等,典型的模型结构如下
_name为odoo模型的名称,将名称中的点号替换为下划线则为数据库表的名称
_description为模型的描述
除了这个两个属性以外,ODOO模型还有如下常用属性
_name | 模型的技术名称,用于数据库表映射(如 res.partner)。 |
_description | 模型的描述信息,用于提供模型的用途说明。 |
_table | 自定义数据库表名。如果未指定,则默认为 _name 的值。 |
_inherits | 多继承机制,用于在现有模型上附加新功能,直接与已有模型字段关联。 |
_rec_name | 指定用于显示记录名称的字段(默认是 name 字段)。 |
_order | 指定记录的默认排序方式,例如 name asc 或 date desc。 |
_log_access | 是否记录创建时间、最后修改时间、创建者和最后修改者(默认 True)。 |
_auto | 是否自动创建数据库表(默认 True)。 |
_transient | 是否是临时模型(True 表示为临时模型,不存储到数据库,适合向导)。 |
_sql_constraints | 定义 SQL 约束条件,例如唯一约束或外键约束。 |
_check_company_auto | 是否自动检查公司字段的一致性(在多公司环境中适用) |
ODOO模型中还包含了字段,字段对应数据库中的字段,常见的字段类型如下
Char | 字符串字段,用于存储短文本(max_length=255 默认)。 |
Text | 文本字段,用于存储长文本。 |
Integer | 整数字段。 |
Float | 浮点数字段,可指定小数位精度。 |
Boolean | 布尔值字段(True/False)。 |
Date | 日期字段(格式为 YYYY-MM-DD)。 |
Datetime | 日期时间字段(格式为 YYYY-MM-DD HH:MM:SS)。 |
Many2one | 定义多对一关系,例如 partner_id = fields.Many2one('res.partner', 'Partner')。 |
One2many | 定义一对多关系,例如 order_line = fields.One2many('sale.order.line', 'order_id', ...)。 |
Many2many | 定义多对多关系,例如 tags = fields.Many2many('project.tags', string='Tags')。 |
Selection | 定义固定选项列表字段,例如 state = fields.Selection([...])。 |
Binary | 二进制字段,通常用于文件存储。 |
字段属性如下
compute | 定义字段的计算方法,例如 @api.depends 修饰器。 |
inverse | 定义字段的反向操作方法,用于保存计算字段的值。 |
readonly | 字段是否只读(True/False)。 |
required | 字段是否为必填(True/False)。 |
default | 字段的默认值,例如 default=lambda self: self.env.uid。 |
store | 是否将计算字段存储到数据库(True/False)。 |
related | 定义关联字段,用于从相关模型中获取数据。 |
domain | 用于筛选字段的值范围,例如 domain="[('state', '=', 'done')]"。 |