转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826118.html
【Odoo中,一切皆模型,连视图都是模型。Odoo将各种数据,如:权限数据、类数据、视图数据等,按照模型分表存储,然后在查看时,按照索引从各个表格读取信息,组合成我们看到的内容。】
一:模型的属性
模型内置属性:可以使用一些内置属性来定义模型的一些特性:
_name :创建odoo模型的内部标识符,必含项。
_description :当用户界面显示模型时,一个方便用户的模型记录标题。
_order :当浏览模型记录或者显示在列表视图时,设置默认顺序。
_rec_name:用来指出引用关联字描述记录的字段,例如多对一关系。 默认情况下,它使用name字段,这是模型中常见的字段。但是这个属性允许我们使用任何其他字段来实现这个目的。【不过我们一般使用_name_get()函数来重写name字段的获取逻辑,手动拼装在关联字段显示出的描述性名称。】
_table:用来支持模型的数据库表名。通常,它是左自动计算,是下划线取代点的模型名称,但也可以设置特定的表名。
_inherit :继承。
_inherits :委托继承。
二:模型对象的获取
Odoo模型被保存在一个*注册中心,它可以引用实例中可用的所有模型类,并且它可以被一个模型名引用。在我们编写的模型方法代码中,可以通过 self.env['x'] 获取一个代表model x的类的引用。(相当于spring托管对象)
模型名称很重要,因为它们是用于访问注册中心的。模型名称的约定规则:用点分隔的小写字母列表。
模型名称必须是全局唯一的,通常与模块名相关。
三:Odoo中的三种模型
1:基本模型models.Model
绝大多数Odoo模型中,类都是基于models.Model类的。 这种类型的模型具有永久的数据库持久性:为它们创建数据库表,并且它们的记录被存储,直到被显式删除。
2:瞬态模型models.TransientModel
通常用于向导。 它们的数据仍然存储在数据库中,但是临时的,一个清理作业定期从这些表中清除旧数据。
3:抽象模型models.AbstractModel
不存储数据,不会在数据库创建表。 抽象模型作为可重用的功能集,利用Odoo的继承功能,混入到其他模型。通常用于定义接口或者用作报表模型。
四:模型之间的关系
命名字段时,有以下约定:以_id、_ids为结尾命名的字段,分别对应的是2one和2many的关系。