ODOO入门系列教程之模型

加微信masterjmz进群交流学习
ODOO模型对应了数据库中的表,是数据库表的映射,通过模型可以方便的操作数据库,避免了传统的通过SQL进行操作,虽然底层也是SQL,但以面向对象的方式进行数据访更有利用工程化,除此,ODOO还能自动创建更新数据库表及字段、约束等,典型的模型结构如下


_name为odoo模型的名称,将名称中的点号替换为下划线则为数据库表的名称
_description为模型的描述
除了这个两个属性以外,ODOO模型还有如下常用属性

_name模型的技术名称,用于数据库表映射(如 res.partner)。
_description模型的描述信息,用于提供模型的用途说明。
_table自定义数据库表名。如果未指定,则默认为 _name 的值。
_inherit用于继承现有模型以扩展功能。
_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')]"。
 


ODOO入门系列教程之模块结构
微信masterjmz