概述

我们在写odoo项目的时候,经常继承model.Model来创建我们自己的ORM映射关系表。

AbstractModel = BaseModel
# 源码
class Model(AbstractModel):
_auto = True # automatically create database backend
_register = False # not visible in ORM registry, meant to be python-inherited only
_abstract = False # not abstract
_transient = False # not transient

这里发现我们继承的Model其实是继承AbstractModel,而AbstractModel是等于BaseModel的,所以我们今天就来研究一下BaseModel做了什么工作。

先研究一下所有类属性最终做了什么工作


# 这个很好理解,是否创建数据表,默认我们常用的继承的Model已经将默认值设为True,如果你只是想创建基础类让自己别的类来继承,那么你就可以创建继承AbstractModel来进行实现。
_auto = False # 注册可见性(具体还没有测试使用过)。
_register = False # 是否是抽象类(Model为False)。
_abstract = True # 是否有时效性,当为True的时候,存储的数据过一段时间会消失,这里我们可以继承TransientModel实现这个效果。
_transient = False # 数据表的名称。
_name = None # 数据表的描述信息。
_description = None # 是否仅适用于自定义模型(没测试过)。
_custom = False # 继承表,如果没有_name,那么则直接在主表中添加字段;
# 如果有_name,那么则会把父类的所有的字段拿过来创建一张新的表。
_inherit = None """
_inherits = {
'a.model': 'a_field_id', # a_field_id字段必须是many2one的字段
'b.model': 'b_field_id'
}
可以直接指定当前表的字段是否关联到父表;
这样的继承方式,可以直接使用主表的字段和方法,相当于在外键的同时会自动创建外键字段表中的数据。
"""
_inherits = {} # 当指定_table的时候,那么在数据库就会创建这个_table的名称,但是在ORM中使用env查询还是使用_name的名称值来作为参考。
_table = None # 还未具体使用,应该是table做query的时候会用到。
_table_query = None # 给指定的字段添加作为排序字段。
_sequence = None # 给SQL加上约束
_sql_constraints = [] # 在外键的字段时候会显示的display_name的字段,这个字段可以自由改动自己想要显示的值
_rec_name = None # 默认排序的字段
_order = 'id' # 下面都是一些还没有做研究的字段
_parent_name = 'parent_id' #: the many2one field used as parent field
_parent_store = False
"""set to True to compute parent_path field. Alongside a :attr:`~.parent_path` field, sets up an indexed storage
of the tree structure of records, to enable faster hierarchical queries
on the records of the current model using the ``child_of`` and
``parent_of`` domain operators.
"""
_active_name = None #: field to use for active records
_date_name = 'date' #: field to use for default calendar view
_fold_name = 'fold' #: field to determine folded groups in kanban views _needaction = False # whether the model supports "need actions" (Old API)
_translate = True # False disables translations export for this model (Old API)
_check_company_auto = False
"""On write and create, call ``_check_company`` to ensure companies
consistency on the relational fields having ``check_company=True``
as attribute.
""" _depends = {}
"""dependencies of models backed up by SQL views
``{model_name: field_names}``, where ``field_names`` is an iterable.
This is only used to determine the changes to flush to database before
executing ``search()`` or ``read_group()``. It won't be used for cache
invalidation or recomputing fields.
"""

总结

  • odoo ORM中类属性的改变可以让odoo的model做出很大的改动(这些属性都是父类属性可以在继承的时候可以重写这些属性)。
  • 下一章将继续研究odoo orm中的一些内置方法,让我们学习了之后更加灵活的对odoo ORM进行自己想要的调整。
  • 有问题的小伙伴可以在下方留言,或许我可以帮助到你。

Odoo ORM研究1 - BaseModel中的类属性的作用的更多相关文章

  1. Odoo ORM研究2 - BaseModel中的常用方法分析

    今天继续研究ORM的BaseModel,昨天研究了一下所有常用属性的具体用法,那么今天研究一下BaseModel中一些常用的方法,我们学会它们并灵活的应用它们,可以为我们开发解决很多的问题. odoo ...

  2. iOS 中的类属性

    转自:iOS 知识小集 从Xcode 8开始,LLVM已经支持Objective-C显式声明类属性了,这是为了与Swift中的类属性互操作而引入的.在WWDC 2016 What's New in L ...

  3. Python中的类属性、实例属性与类方法、静态方法

    1.什么是类对象,实例对象 类对象:类名 实例对象:类创建的对象 2.类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++.Java中类的静态成员变量有点 ...

  4. Mybatis中实体类属性与数据库列表间映射方法介绍

               这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考.         Mybatis不像Hibernate中那么自动化,通过@Co ...

  5. java编程中Properties类的具体作用和使用

    如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的.(如清单 1 所示).最近更新的java.util.Properti ...

  6. python中的类属性和实例属性

    属性就是属于一个对象的数据或者函数,我们可以通过句点(.)来访问属性,同时 Python 还支持在运作中添加和修改属性. 我们先来看看类里面的普通字段: class Test(object): nam ...

  7. 23.python中的类属性和实例属性

    在上篇的时候,我们知道了:属性就是属于一个对象的数据或者函数,我们可以通过句点(.)来访问属性,同时 python 还支持在运作中添加和修改属性. 而数据变量,类似于: name = 'scolia' ...

  8. java编程中Properties类的具体作用和使用!

    如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的.(如清单 1 所示).最近更新的java.util.Properti ...

  9. Mybatis中实体类属性和数据列之间映射的四种办法

    http://blog.csdn.net/lmy86263/article/details/53150091 Mybatis不像hibernate中那么自动化,通过@Column注解或者直接使用实体类 ...

随机推荐

  1. GPU编程和流式多处理器(四)

    GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...

  2. ARM-CPU卷积网络的自动调谐

    ARM-CPU卷积网络的自动调谐 为特定的ARM设备自动调谐对于获得最佳性能至关重要.这是一个关于如何调整整个卷积网络的资料. 以模板的形式编写了TVM中ARM CPU的操作实现.模板有许多可调旋钮( ...

  3. 转置卷积Transposed Convolution

    转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...

  4. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

  5. 计算机网络-vlan划分

    1.VLAN的划分 (1)基于端口的VLAN: 交换机A上的1,2端口和交换机B上的3,4端口构成一个VLAN. 交换机A上的3,4端口和交换机B上的1,2端口构成一个VLAN. (2)基于MAC地址 ...

  6. 菜鸟刷题路:剑指 Offer 06. 从尾到头打印链表

    剑指 Offer 06. 从尾到头打印链表 class Solution { public int[] reversePrint(ListNode head) { Stack<Integer&g ...

  7. 【NX二次开发】判断面是否相切,相切面。

    判断面是否相切,相切面. 用到的函数: UF_MODL_ask_minimum_dist 获取两个对象之间的最短距离,以及点坐标 UF_MODL_ask_face_parm 给定一个参考点,返回曲面上 ...

  8. 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

    目录 系列文章 领域逻辑和应用逻辑 多应用层 示例:正确区分应用逻辑和领域逻辑 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落 ...

  9. vs中打开ashx文件没有提示,没有高亮标记解决方法

    在VS菜单中 工具 --- 选项 --- 文本编辑器 --- 文件扩展名,在右侧添加 ashx ,选中Microsoft Visual C# 保存后,再打开就行了 ashx文件头部报错后,删除 < ...

  10. Java并发之ReentrantLock源码解析(四)

    Condition 在上一章中,我们大概了解了Condition的使用,下面我们来看看Condition再juc的实现.juc下Condition本质上是一个接口,它只定义了这个接口的使用方式,具体的 ...