2.odoo13的学习(odoo中的模型、模型类属性、字段属性等)
目录
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修改后代码不生效的问题
在后续开发中,如果出现代码修改后不生效的情况,一定要注意以下几点:
- 有没有重启pycharm
- pycharm过期自动退出后,有没有在任务管理器中结束python进程 是否重启了项目
- 如果不生效的代码为model或者view,那么有没有在model的 __init__.py 或者 __manifest__.py 文件中引用
- 如果报错时,提示某个内容不存在,那么应检查文件的引入顺序
B站up主
单三er的个人空间_哔哩哔哩_Bilibilihttps://space.bilibili.com/419877109
2.odoo13的学习(odoo中的模型、模型类属性、字段属性等)相关推荐
- odoo中的inherit模型属性继承及模型关系
odoo中的inherit模型属性继承及模型关系 一.程序bug_adv.py中 class BugAdvanced(models.Model): _inherit='bm.bug' #进阶模型当中新 ...
- 关于Cocos2d-x中对其他某个类的某个属性的获得
类A要获得类B中的某个属性,可以是节点属性 方法一 1.先在B类中定义一个_edge的节点属性(可以在B类中进行各种对_edge的操作),然后写一个方法 Node* GameController::g ...
- [深度学习] Pytorch中RNN/LSTM 模型小结
目录 一 Liner 二 RNN 三 LSTM 四 LSTM 代码例子 概念介绍可以参考:[深度学习]理解RNN, GRU, LSTM 网络 Pytorch中所有模型分为构造参数和输入和输出构造参数两 ...
- java创建一个不可变对象_如何在Java中创建不可变类?
java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...
- springboot项目中一个实体类引用其它实体类的字段并显示到页面上
1.需要在该实体类中添加引用实体类的字段,并添加getter和setter方法,并添加@Transient注解,或者使用@TableField(exist = false)注解.如下图: 2.在map ...
- 4.odoo13的学习(odoo中的xml)
目录 1.使用xml插入数据库数据 2.data的定义 3.引入xml 4.修改引入data的xml,修改后让其生效 5.后台界面的操作 1.使用xml插入数据库数据 给数据库中插入模块的预置数据或者 ...
- 深度学习中的Normalization模型(附实例公式)
来源:运筹OR帷幄 本文约14000字,建议阅读20分钟. 本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效. [ 导读 ]不 ...
- 理论与实践中的CNN模型结构,如何引领深度学习热潮
摘要: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合.卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始Le ...
- 推荐系统中基于深度学习的混合协同过滤模型
近些年,深度学习在语音识别.图像处理.自然语言处理等领域都取得了很大的突破与成就.相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段. 携程在深度学习与推荐系统结合的领域也进行了相关的研究与应 ...
最新文章
- FAQ系列 | 如何保证主从复制数据一致性(转)
- 达摩院浙大上海人工智能实验室推出洛犀平台:大小模型端云协同进化
- FT《金融时报》:中国巨头争夺企业级市场,阿里云份额已近六成
- 第二十一讲 特征值和特征向量
- resnet50网络结构_AAAI2020 | 利用网络结构关系加速NAS+Layer
- ValueError: No JSON object could be decoded
- c3p0使用 与批量生成
- 硬核干货:你从普通码农到架构师的封神之路
- 根据缺口的模式选股买股票,python 学习代码
- WGS84坐标系、Web墨卡托、GCJ02坐标系、BD09坐标系—常用坐标系简述
- linux 上如何测速
- 凌小宁教授给软件新人的演讲——选择的力量
- 一加7使用adb强制90hz时遇到的问题
- CATIA软件VBA二次开发:Excel文件中点坐标数据导入与生成点应用程序编写
- 【重磅】2022年通信行业白皮书汇总下载
- 遇见王沥川的人生感悟_遇见王沥川的人生感悟
- [笔记的明子] - C语言笔记
- 如何搭建大规模机器学习平台?以阿里和蚂蚁的多个实际场景为例
- 时代周刊-老牛上封面的那一期
- 利用Python进行数据分析·第2版
热门文章
- 【JVM调优工具篇】使用JProfiler追踪GC Roots溯源
- Illegal access: this web application instance has been stopped already
- Android Studio——[The ‘kotlin-android-extensions‘ Gradle plugin is deprecated.]解决方案
- 《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计
- Java Web——文件下载时中文文件名乱码问题解决方案
- Mysql默认隔离级别为什么是可重复读?
- C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】
- Android Bitmap 研究与思考(上篇)
- ios中播放gif动画
- 一道关于笔试的多线程题目