目录

1.什么是模型

2.模型的定义

2.1 模型的位置

2.2 初始模型类

2.3 模型类的常用属性

2.4 模型类字段的属性参数

2.5 模型类创建好后,odoo默认创建一些字段

2.6 初始模型类结合菜单查看效果

2.6.1 菜单的定义

2.6.2 action的定义(动作)

2.6.3 查看创建的模块和进行操作以及保存创建数据

3.命名规范

3.1模型命名规范

3.2菜单命名规范

3.3视图命名规范

4.odoo修改后代码不生效的问题


1.什么是模型

odoo通过orm来实现对数据库的操作,可以通过在odoo中定义模型,然后根据定义的模型来生成数据库中的表,并通过python中操作对象的方式,来进行对数据库的操作,大部分场景下不在需要写SQL语句,提高了数据库操作的效率以及安全性

2.模型的定义

2.1 模型的位置

模型在创建好的模块文件里面的model类

Odoo的一个关键组件是ORM层。该层避免了手动编写大多数SQL并提供可扩展性和安全性服务。业务系统通过继承Model类,定义成python对象,通过该对象与后台数据库进行自动化集成。

2.2 初始模型类

例如:我们建立一个考试教室的模型类

class TestRoomModel(models.Model):# 模型名称,类的唯一标识,其他类可以通过此字段引用本类_name = 'test.test_room'# 多模型类的描述,提高查询的友好性,为用户查看该模型的标题_description = 'test_room 'name = fields.Char()seat_num = fields.Integer()
  • odoo中一个模型就是一个模型类,继承models.Model
  • _name属性,它用来定义模型名称, 一般是   模块名称.模型类名称

模型类建立好之后,在Django中是要通过迁移命令完成的,在odoo中是找到该应用之后点击升级完成的,如下图

注意,没安装的点击安装后,才会出现升级的操作,然后点击升级

我们到数据库里面查找生成数据库表以及字段,如下图,里面就有我们的数字字段
默认的表名是把  _name里面的值,中的点换成了下划线

2.3 模型类的常用属性

属性 解释
_name 类的唯一标识,其他类可以通过此字段引用本类
_description 对模型的简单描述
_order 设置该模型展示时默认的排序字段
_rec_name odoo默认使用name字段,作为数据记录的描述,可以用该字段来指定其他字段,也可以使用 name_get() 方法做为描述。
_table 模型在后台存储的表名,在默认情况下odoo会将 _name 中的 . 替换为 _ 作为表名,通过该字 段可以指定。
_inherit、_inherits 用于继承

_order:  例如: _order = 'create_date desc'     解释:按照创建时间倒序排列

2.4 模型类字段的属性参数

属性参数 类型 解释 默认值
string  unicode 用户界面中(对用户可见)的字段标签 字段名
size Int 允许字符串的长度 长度不限制
required  bool 若为 True,该字段不能为空,必须要么带有默认值,要么保持在创建记录时给定值。长形,在用户界面中向用户提供提示信息。 False
help  unicode 帮助,在用户界面中向用户提供提示信息。 ''
index bool 请求 Odoo 对字段创建数据库索引 。 False
readonly bool 该字段是否为只读 False
copy  bool 复制记录时是否应复制字段值 True
default 根据字段的类型 任何字段都可以被赋予一个默认值。在字段定义中,添加选项 default=X,是 Python 文字值(布尔值、整数、浮点数、字符串)或采用模型并返回值的函数

可以使用自定义的函数,设置值, 装饰器api.model

class estate_property(models.Model):_name = 'estate.property'_description = '不动产模型类'name = fields.Char(required=True, string='名称')  # 名称description = fields.Text(string='描述')  # 描述postcode = fields.Char(string='邮政编码')  # 邮政编码@api.modeldef _get_time(self):return datetime.now() + relativedelta(months=3)# date_availability = fields.Date(string='可用日期', copy=False, default=datetime.now() + relativedelta(months=3))  # 可用日期date_availability = fields.Date(string='可用日期', copy=False, default=_get_time)  # 可用日期

2.5 模型类创建好后,odoo默认创建一些字段

列名 解释 类型
id 模型中对一条记录的唯一标识符。 ID
create_date 记录的创建日期。 Datetime
create_uid 创建记录的用户。 Many2one
write_date 记录的最后修改日期。 Datetime
write_uid 最近修改记录的用户。 Many2one

了解之后可以修改修改模型类了

2.6 初始模型类结合菜单查看效果

2.6.1 菜单的定义

菜单的位置以及在哪块编写,是在views文件夹下的views.xml中

一个菜单的创建如下图:.

<odoo><data><menuitem id="test_room" name="考场"/><menuitem id="test_room_manage" name="考场管理"parent="test_room" action="test_room_action"/></data>
</odoo>
  • 使用menuitem定义菜单
  • id为菜单的标识,被用来做层级关系
  • parent :    该二级菜单属于哪个菜单,即为菜单的父级菜单
  • action 点击菜单执行的动作,action看2.3.1

2.6.2 action的定义(动作)

<odoo><data><record model="ir.actions.act_window" id="test_room_action"><field name="name">科目管理</field><field name="res_model">test.test_room</field><field name="view_mode">tree,form</field></record><menuitem id="test_room" name="考场"/><menuitem id="test_room_manage" name="考场管理"parent="test_room" action="test_room_action"/></data>
</odoo>
  • action一定要写在菜单的上边,因为菜单里面的action属性需要用到action。
  • 是用record标签包裹起来
  • model :   代表着这条数据要存储到数据库的位置
                    值为:ir.actions.act_window(窗口动作表)
  • id:    这个record的id,菜单可以调用,其必须在整个odoo应用中唯一
  • name: 页面操作区域的名称
    • res_model: 页面使用的模型
    • view_model:  用来指定模型的视图,如果没有定义则使用默认的视图类型,定义后只能使用定义的视图类型。比如去掉form,就代表不能使用form视图创建数据
    • tree代表列表视图、form代表表单视图

2.6.3 查看创建的模块和进行操作以及保存创建数据

菜单和action加上之后,要把模块升级一下

然后查看效果,(不用管这个会议室,这是我之前创建的)

创建个新数据,对应两个字段,就是模型类对应的两个字段

也可以进行修改编辑

3.命名规范

3.1模型命名规范

  • 如果只有一个模型,则模型名称应与模块名称相同。
  • 如果模型较多,则可将多个模型根据业务逻辑分组,每组有一个主模型。
  • 在定义模型的名称时,使用名称的单数形式,使用大驼峰的命名风格,并以‘Model’结尾。
  • 模型文件名应以主模型的名称来名称(下划线命名)。

3.2菜单命名规范

菜单的名称使用 _menu , 或是子菜单用 _menu_ 如果菜单那与模型相关,那么就放到和模型相关的视图文件中, _view.xml 如果是与模型没有绑定关系的主菜单,可提取到 _menus.xml 文件

3.3视图命名规范

主动作为 _action 。其它使用 _ 作为后缀,其中detail 为简洁地解释动作的小 写字符串。仅用于多个动作对模型进行声明时。

4.odoo修改后代码不生效的问题

在后续开发中,如果出现代码修改后不生效的情况,一定要注意以下几点:

  1. 有没有重启pycharm
  2. pycharm过期自动退出后,有没有在任务管理器中结束python进程 是否重启了项目
  3. 如果不生效的代码为model或者view,那么有没有在model的 __init__.py 或者 __manifest__.py 文件中引用
  4. 如果报错时,提示某个内容不存在,那么应检查文件的引入顺序

B站up主

单三er的个人空间_哔哩哔哩_Bilibilihttps://space.bilibili.com/419877109

2.odoo13的学习(odoo中的模型、模型类属性、字段属性等)相关推荐

  1. odoo中的inherit模型属性继承及模型关系

    odoo中的inherit模型属性继承及模型关系 一.程序bug_adv.py中 class BugAdvanced(models.Model): _inherit='bm.bug' #进阶模型当中新 ...

  2. 关于Cocos2d-x中对其他某个类的某个属性的获得

    类A要获得类B中的某个属性,可以是节点属性 方法一 1.先在B类中定义一个_edge的节点属性(可以在B类中进行各种对_edge的操作),然后写一个方法 Node* GameController::g ...

  3. [深度学习] Pytorch中RNN/LSTM 模型小结

    目录 一 Liner 二 RNN 三 LSTM 四 LSTM 代码例子 概念介绍可以参考:[深度学习]理解RNN, GRU, LSTM 网络 Pytorch中所有模型分为构造参数和输入和输出构造参数两 ...

  4. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

  5. springboot项目中一个实体类引用其它实体类的字段并显示到页面上

    1.需要在该实体类中添加引用实体类的字段,并添加getter和setter方法,并添加@Transient注解,或者使用@TableField(exist = false)注解.如下图: 2.在map ...

  6. 4.odoo13的学习(odoo中的xml)

    目录 1.使用xml插入数据库数据 2.data的定义 3.引入xml 4.修改引入data的xml,修改后让其生效 5.后台界面的操作 1.使用xml插入数据库数据 给数据库中插入模块的预置数据或者 ...

  7. 深度学习中的Normalization模型(附实例公式)

    来源:运筹OR帷幄 本文约14000字,建议阅读20分钟. 本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效. [ 导读 ]不 ...

  8. 理论与实践中的CNN模型结构,如何引领深度学习热潮

    摘要: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合.卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始Le ...

  9. 推荐系统中基于深度学习的混合协同过滤模型

    近些年,深度学习在语音识别.图像处理.自然语言处理等领域都取得了很大的突破与成就.相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段. 携程在深度学习与推荐系统结合的领域也进行了相关的研究与应 ...

最新文章

  1. FAQ系列 | 如何保证主从复制数据一致性(转)
  2. 达摩院浙大上海人工智能实验室推出洛犀平台:大小模型端云协同进化
  3. FT《金融时报》:中国巨头争夺企业级市场,阿里云份额已近六成
  4. 第二十一讲 特征值和特征向量
  5. resnet50网络结构_AAAI2020 | 利用网络结构关系加速NAS+Layer
  6. ValueError: No JSON object could be decoded
  7. c3p0使用 与批量生成
  8. 硬核干货:你从普通码农到架构师的封神之路
  9. 根据缺口的模式选股买股票,python 学习代码
  10. WGS84坐标系、Web墨卡托、GCJ02坐标系、BD09坐标系—常用坐标系简述
  11. linux 上如何测速
  12. 凌小宁教授给软件新人的演讲——选择的力量
  13. 一加7使用adb强制90hz时遇到的问题
  14. CATIA软件VBA二次开发:Excel文件中点坐标数据导入与生成点应用程序编写
  15. 【重磅】2022年通信行业白皮书汇总下载
  16. 遇见王沥川的人生感悟_遇见王沥川的人生感悟
  17. [笔记的明子] - C语言笔记
  18. 如何搭建大规模机器学习平台?以阿里和蚂蚁的多个实际场景为例
  19. 时代周刊-老牛上封面的那一期
  20. 利用Python进行数据分析·第2版

热门文章

  1. 【JVM调优工具篇】使用JProfiler追踪GC Roots溯源
  2. Illegal access: this web application instance has been stopped already
  3. Android Studio——[The ‘kotlin-android-extensions‘ Gradle plugin is deprecated.]解决方案
  4. 《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计
  5. Java Web——文件下载时中文文件名乱码问题解决方案
  6. Mysql默认隔离级别为什么是可重复读?
  7. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】
  8. Android Bitmap 研究与思考(上篇)
  9. ios中播放gif动画
  10. 一道关于笔试的多线程题目