Odoo中,一切皆模型,连视图都是模型。Odoo将各种数据,如:权限数据、类数据、视图数据等,按照模型分表存储,然后在查看时,按照索引从各个表格读取信息,组合成我们看到的内容。
创建模型
模型对象
Odoo的模型对象在odoo模块的models.py文件中,最基础的对象是BaseModel;
Odoo的模型对象有三个:AbstractModel、Model、TransientModel
BaseModel
BaseModel是一切模型的基础
AbstractModel
AbstractModel = BaseModel;
AbstractModel 是一个抽象模型不会在数据库创建对应表,Model可以继 AbstractModel,AbstractModel为多个Model提供相同属性的统一声明。抽象模型作为可重用的功能集,利用Odoo的继承功能,混入到其他模型。
Model
Model继承自AbstractModel,但是Model的 _auto=True , _abstract = True ;
Model的模型对象在模块安装或升级的时候会自动在数据库中创建相应的数据表
TransientModel
TransientModel继承自Model,但是TransientModel的_transient = True,TransientModel是一种特殊的Model,TransientModel对应的数据表中的数据系统会定时的清理;TransientModel的数据只能做临时数据使用,一般向导对象模型会声明成TransientModel
模型属性
模型属性:模型类可以使用一些属性来控制它们的一些行为
_name :创建odoo模型的内部标识符,必含项。
_description :当用户界面显示模型时,一个方便用户的模型记录标题。
_order :当浏览模型记录或者显示在列表视图时,设置默认顺序。
_rec_name:用来指出引用关联字描述记录的字段,例如多对一关系。 默认情况下,它使用name字段,这是模型中常见的字段。但是这个属性允许我们使用任何其他字段来实现这个目的。
_table:用来支持模型的数据库表名。通常,它是左自动计算,是下划线取代点的模型名称,但也可以设置特定的表名。
_inherit :继承。
_inherits :嵌入式继承。
字段
常用字段
-
Char用于字符串值。
-
Text用于多选字符串值。
-
Selection用于选择列表。这是一个值和描述对的列表。所选择的值存储于数据库中,可以是字符串或整数。描述自动可翻译。
**小贴士:**在Selection类型的字段中,可以使用整型的键,但应注意Odoo内部将0解释为未设置,不会显示键为0的描述。
-
Html类似于text字段,但通常用于以HTML格式存储的富文本。
-
Binary字段存储二进制文件,如图像或文档。
-
Boolean存储True/False 值。
-
Date存储日期值。它在数据库中以日期进行存储。ORM中以Python date对象的形式对其进行处理。Odoo 12之前的版本中ORM以字符串的形式处理日期。所使用的格式在odoo.fields.DATE_FORMAT中定义。
-
Datetime用于日期时间值。在数据库中以原生UTC时间datetime进行存储。ORM中以Python datetime对象的形式对其进行处理。Odoo 12之前的版本中ORM以字符串的形式处理datetime。所使用的格式在odoo.fields.DATETIME_FORMAT中定义。
-
Integer字段无需过多解释了。
-
Float(浮点)字段存储数值。精度可由位数和小数位数对来定义。
-
Monetary可存储某个币种的数量值。这会在本章中的向模型添加货币字段一节进行讲解。
Date与Datetime特殊方法
Date有如下方法:
- fields.Date.to_date(string_value将字符串解析为一个date对象。
- fields.Date.to_string(date_value)将Date对象表示为字符串。
- fields.Date.today()以字符串格式返回当前日期。这适合用于默认值。
- fields.Date.context_today(record, timestamp)根据记录(或记录集)上下文的时区以字符串格式返回时间戳的日期(或者在省略时间戳时返回当天)。
Datetime有如下方法:
- fields.Datetime.to_datetime(string_value)将字符串解析为datetime对象。
- fields.Datetime.to_string(datetime_value)将datetime对象表示为字符串。
- fields.Datetime.now()以字符串格式返回当天及当前时间。它适合用作默认值。
- fields.Datetime.context_timestamp(record, timestamp)将时间戳原生datetime按照记录上下文的时区转化为对应时区。它不适合用作默认值,但是在向外部系统发送数据等操作时可以使用。
字段属性
- string是字段的标题,在UI视图标签中使用。它是可选项,如未设置,会通过首字母大写及将空格替换为下划线来从字段名获取标签。
- translate,在设置为True时,让字段可翻译,它可根据用户界面的语言保存不同值。
- default是默认值。也可以是一个用于计算默认值的函数,例如default=_compute_default,_compute_default是在定义字段前模型中所定义的一个方法。
- help是在UI提示工具中显示的解释性文本。
- groups让字段仅对安全组可用。它是包含安全组的XML ID逗号分隔列表的一个字符串。
- states允许用户界面依据state字段的值来动态设置readonly, required和invisible的值。因此,它要求存在一个state字段并在表单视图中使用(即便是隐藏的)。state属性的名称是在Odoo硬编码且无法修改的。
- copy标记在复制记录时是否拷贝字段值。对于非关系型字段和Many2one它的默认值是True、对One2many和计算字段它的值是False。
- index,在设置为True时,为该字段创建一个数据库索引,有时可供更快速搜索使用。它取代了已淘汰的select=1属性。
- readonly标记让该字段在用户界面中默认仅为只读。
- required标记强制字段在用户界面中默认为必填。
- sanitize标记用于HTML字段并去除包含不安全标签的内容。使用它会对输入进行全局清理。如果需要更精细的控制&#x