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`` 属性的字段在公司上的一致性。