odoo13源码研读之BaseModel

1.api.Meta(所有模型类的元类。 它的主要目的是为每个模块注册模型。)

class MetaModel(api.Meta):	
	 def _get_addon_name(self, full_name):
        '''(OpenERP) 模块名称可以在 odoo.addons 命名空间中,也可以不在。 例如,模块“sale”可以导入为“odoo.addons.sale”(正确的方式)或“sale”(为了向后兼容)。'''
        module_parts = full_name.split('.')
        # 如果参数full_name用'.'号分割后,数组前两位是odoo,addons,则返回数组第三个元素,例如'odoo.addons.hrp_base',则返回hrp_base,否则直接返回模块名称
        if len(module_parts) > 2 and module_parts[:2] == ['odoo', 'addons']:
            addon_name = full_name.split('.')[2]
        else:
            addon_name = full_name.split('.')[0]
        return addon_name

2.BaseModel(Odoo 模型的基础类,继承MetaModel)

  • :class:Model 用于常规数据库持久化模型,就是一般业务模型。

  • :class:TransientModel 用于临时数据,存储在数据库中但每隔一段时间自动清空表数据。

  • :class:AbstractModel 用于抽象类,用于共享多个继承模型

系统为每个数据库自动实例化每个模型一次。 这些实例代表每个数据库上的可用模型,并取决于该数据库上安装了哪些模块。 每个实例的类是从创建并继承自相应模型的 Python 类构建的。

class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
	'''
	要创建不实例化的类,:attr:`~odoo.models.BaseModel._register` 属性可以设置为 False。
	'''
	_auto = False # 是否应创建数据库表,默认为True
	_register = False # 在 ORM 注册表中不可见
	_abstract = True # 是否为抽象模型
	_transient = False # 是否为瞬时模型
	_name = None # 模型名称
    _description = None  # 模型释义
    _custom = False # 仅对自定义模型为 True
    _inherit = None  # 继承模型
    _inherits = {}  # 多态继承,需要相应的外键映射父类 
    # 例如:_inherits = {
    #      'a.model': 'a_field_id',
    #      'b.model': 'b_field_id'
    #  }
    _table = None # 如果_auto为True时,自定义数据库表名
    _sequence = None  # 为ID字段指定序列,创建表时初始化序列
    _sql_constraints = [] # SQL 约束 [(name, sql_def, message)]
    _rec_name = None  # 用于标记记录的字段,默认值:``name``
    _order = 'id'   # 搜索时默认排序字段
    _parent_name = 'parent_id'  # 用作父字段的 many2one 字段
    _parent_store = False # 设置记录的索引存储,用“child_of”和“parent_of”域对当前模型的记录进行更快的分层查询
    _date_name = 'date'  # 指定默认日历视图的字段
    _fold_name = 'fold'  # 用于指定看板视图中折叠组的字段
     _check_company_auto = False # 在写入和创建时,调用``_check_company`` ,以确保具有``check_company=True`` 属性的字段在公司上的一致性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值