class odoo.models.BaseModel
odoo 模型的基类,odoo模型是通过继承一下模型之一创建的:
model:用于常规数据库持久化模型
TransientModel:用于存储在数据库中的临时数据,但会定期自动清理
AbstractModel:用于被多个继承模型共享的抽象超类
系统会自动为每个数据库实例化每个模型一次。这些实例代表每个数据库上可用的模型,并且取决于该数据库上安装的模块。每个实例的实际类是由创建和继承相应模型的Python类构建的。
每个模型实例都是一个“recordset”,即模型记录的有序集合。Recordsets由诸如 browse()、search()或字段访问等方法返回。记录没有显式的表示:一个记录被表示为一个记录集合的一个记录。要创建一个不应该被实例化的类,可以将_register属性设置为 False。
class spare_order(models.Model):
_name = 'spare.order'
_description = '备件申请'
_register = False # 注册表可见性
还有很多其他属性:
_auto = False
是否创建数据库表,如果是False,请使用init()来创建数据库表。默认为True用于Model和TransientModel,为False用于AbstractModel。
_log_access
ORM 是否应自动生成并更新访问日志字段,默认为_auto属性设置的任何值。
_table = None
SQL表名,如果_auto为True,则模型使用该表名
_sql_constraints= []
SQL 约束条件 [(名称,SQL定义,消息)],例如:
_sql_constraints = [
('name_uniq', 'unique(name, default_code,draw_code,part_code)', '名称必须唯一!'),
]
_transient= False
模型是否为 transient.
_abstract= True
模型是否抽象
_name= None
模型名称(点符号表示法,模块命名空间)
_description= None
模型的非正式名称
_inherit= ()
Python继承的模型:
-
如果 _name被设置,继承的父模型的名称
-
如果 _name未设置,则为要就地扩展的单个模型的名称
_inherits= {}
字典{‘parent_model’: ‘m2o_field’}将父业务对象的_name映射到相应的外键字段名称以使用:
_inherits = { 'a.model': 'a_field_id', 'b.model': 'b_field_id' }
实现基于组合的继承:新模型公开继承模型的所有字段,但不存储它们:值本身仍存储在链接记录上。
如果在 _inherits
--ed模型中定义了多个具有相同名称的字段,则继承的字段将对应于最后一个(按继承列表顺序)。
_rec_name= None
用于标记记录的字段,默认为: name
_order= 'id'
搜索结果的默认排序字段
_check_company_auto= False
在写入和创建时,调用 _check_company
来确保具有 check_company=True
属性的关系字段的公司一致性。
_parent_name= 'parent_id'
用作父级字段的many2one字段
_parent_store= False
设置为True以计算parent_path字段。
在 parent_path字段旁边,设置了记录的树形结构的索引存储,以便使用 child_of
和 parent_of
域操作符在当前模型的记录上进行更快的层次查询。
_fold_name= 'fold'
用于确定看板视图中折叠组的字段
class odoo.models.TransientModel(env, ids, prefetch_ids)
瞬态记录的模型超类,用于临时持久化,并定期进行清理。
瞬态模型具有简化的访问权限管理,所有用户都可以创建新记录,并且只能访问他们创建的记录。超级用户可以无限制地访问所有瞬态模型记录。
_transient_max_count= False
最大瞬态记录数,如果为 0
则无限制
_transient_max_hours= 1.0
最大空闲生命周期(以小时为单位),如果为 0
则无限制
_transient_vacuum()
清理瞬态记录。
每当达到 _transient_max_count 或 _transient_max_hours 条件(如果有的话),它会从临时模型表中取消链接旧记录。
实际清理只会在每5分钟内发生一次。这意味着可以频繁调用此方法(例如每次创建新记录时)。
同时启用max_hours和max_count的示例:
假设max_hours = 0.2(即12分钟),max_count = 20,表中有55行,其中有10行在最近5分钟内创建/更改,另外12行在5到10分钟之间创建/更改,其余的行创建/更改时间超过12分钟。
-
基于时间的清理将保留最近12分钟内创建/更改的22行记录
-
计数基础的清理将会清除另外12行。不仅仅是2行,否则每次添加都会立即导致最大值再次达到。
-
过去5分钟内创建/更改的10行记录将不会被删除
class transmodel(models.TransientModel):
_transient_max_count = False
_transient_max_hours = 1.0
欢迎加群一起讨论DTCloud 4实施开发。
群号:557402829