第十二节 DTCloud 4BaseModel

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(envidsprefetch_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

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DTCloud4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值