学习内容转载于:
Odoo里模型和视图那些事儿_CBGCampus的博客-优快云博客
【学习内容】
一、关于模型(Models)
1、Model是存储数据记录的最主要手段,它是持久化地对数据记录(record)进行存储,直至对其进行删除。几乎所有的自定义模块都会继承自models.Model,可以存储数据库中所有开发所需的数据与字段。
学习笔记:
- 数据记录就是record,在数据库的table里的一行行数据,一行数据就是一条record(记录)
- 持久化:新建一个word文档,在word文档里敲字,上下滑动鼠标滚轮,可以查看到已经写下的内容,此时的word文档使用的是内存,存在RAM上,是电存储,里面是高电位低电位,运行速度非常快。如果保存文档后再就把word文档关闭掉,再次打开word文档,还可以看到已经写下的内容,此时的word文档存在硬盘上,是磁存储。点击保存文档的过程,就是将电存储转化为磁存储的过程,也就是持久化。
- 自定义模块:自定义模块就是加载在odoo上的一个个模块。如果odoo是一个手机,那么自定义模块就是一个个的APP。
- 继承:定义是子类继承父类的属性和方法
【学习内容】
1.models.Model
这里的models和Model的含义是不一样的。前者指的是Odoo的模型对象,也就是我们开发Odoo时所需要用到的.py文件;后者指的是对于列表、字典、自定义类这些可变变量,如果将其作为类变量,则是传引用——即所有对象的类变量公用一个内存地址。这是Python语言的语法所规定的,其定义代码可由图1-1-1示例:
学习笔记:
- models,就是指开发Odoo时用到的.py文件
- Model,,我没有看懂Model的定义,但是从网址中可得知,Model = 数据库中的表。Model似乎就是指数据库中的表,这里暂时这么理解,以后学习深入,再修正笔记。
【学习内容】
2.name属性和description属性
name属性是模型中的必填属性,Odoo里Class的唯一标识,并且在整个模型文件的全局不能够重复。
description是描述属性,只在查看模型界面的时候作为展示使用,没有实际用户。它可选不填,但好的编码习惯我们应该书写尽量详尽的描述。
学习笔记:
- name是模型中的必填属性,name就是模型的名字,具有唯一性。
- description是模型中一个属性,用来描述模型,可选填。
【学习内容】
3.function函数(修饰器)
@api.multi:对记录集进行操作的方法需要添加此修饰器,此时self就是要操作的记录集。所以方法内应该对self进行遍历

@api.model:模型(model)层面的操作需要添加此修饰器,它不针对特定的记录,也不保留记录集,self是对模型的引用。相当于类静态函数。例如create方法,widget的调用方法,如图1-3-2所示:

学习笔记:
- 记录集:一堆record放在一起就是记录集,就像数据库中的一张表
- odoo里的装饰器,没看明白,以后再研究。
【学习内容】
4.常见字段属性
4.1:Char: 单行文本;
4.2:Boolean: 逻辑字段;
4.3:Text: 多行文本,表现为textarea
4.4:True/False Selection: 列表选择字段,第一个参数为元组列表,表示可选列表, 如:
GENDER = [ ('male', u'男'), ('female', u'女'), ('other', u'其他') ]
gender = fields.Selection(GENDER, string=u'性别')
4.5:Binary: 二进制字段,通常用于图片、附件等文件读写;
4.6:Integer: 整型字段;
4.7:Float: 浮点型字段,可以指定位数digits,使用元组(a,b),其中a是总位数,b 是保留小数位;
4.8:Datetime: 日期对象,精确到秒 Html: 界面展示HTML内容,带有富文本编辑器;
4.9:required: 控制字段是否必填, 会为数据库添加约束NOT NULL,因此对API调用是生效;
4.10:groups: 控制字段权限,为字段分权限组,只有处于该权限组的用户可见该字段。
学习笔记:
- Char: 单行文本——类似Axure里的单行文本框
- Boolean: 逻辑字段——布尔值:TRUE,FALSE
- Text: 多行文本,表现为textarea——类似Axure里的多行文本框
-
True/False Selection: 列表选择字段,第一个参数为元组列表,表示可选列表, 如:
GENDER = [ ('male', u'男'), ('female', u'女'), ('other', u'其他') ]
gender = fields.Selection(GENDER, string=u'性别')——应该是在讲下拉列表里有多个选项,以后深入学习的时候再确定。
-
required:控制字段是否必填, 会为数据库添加约束NOT NULL,因此对API调用是生效——解释很清楚,用来控制字段是否是必填项
-
groups: 控制字段权限,为字段分权限组,只有处于该权限组的用户可见该字段——解释很清楚,只有处于该权限组的用户可见该字段
【学习内容】
二、关于视图(Views)
对于视图这部分知识点的讲解,将从其标签、属性、XML文件等方面出发,为大家做一些尽可能详细易懂的介绍。
前面说到了Views是为用户提供视图界面的,那么在这里着重详细介绍一下Odoo开发中最为常见的一种视图间的跳转。即具体包括以下5个步骤:
a. 从菜单的下拉框中选中自己开发的某个子菜单;
b. 并编辑该子菜单需要展示的字段(重点);
c. 将该菜单的内容以tree 的形式显示;
d. 编辑该tree所对应的form页面并显示(重点);
e. 实现对数据的保存与查看。
下面就是每个步骤中会使用到的关键知识点,把这些都整明白的话,那掌握视图部分开发的基本流程已无大碍。
1.menuitem标签
这是菜单的专属标签,所谓菜单,就是一层层的点击过后,会逐一展示出不同内容的页面基本元素。
2.parent属性
这个属性在视图与视图之间的关联中起着非常关键的作用:parent可以作为某一视图的父属性,从而关联到另一id名称为该视图名称的另一视图。并且在安装了Pycharm Odoo插件后按住Ctrlt同时点击鼠标,可以进行直接的跳转。
3.action属性
action则是一个动作事件的总称,它的效果是可以定义和执行一些需要被使用到的XML文件,同时声明一些该XML文件的必要属性:动作id、指定的视图类型、所要展示的视图id等。
讲到这里我们不难发现,Odoo视图属性之间的关联性非常的强几乎就是直接的关联和跳转。于是前端代码的编写时间便得到了节约,正是如此有效率地实现某些必须的的功能,才将Odoo“低代码”的特性发挥地淋漓尽致。
学习笔记:
- menuitem标签,是用来定义菜单的专属标签,必填属性有两个:id,name(就是网页上显示出来的菜单名)。选填属性:sequence(用来控制菜单顺序)
- parent属性,用来定义菜单上下级的,parent = 上级菜单的id
- action属性,点击菜单以后,要做什么,是用action属性来定义的,比如:点击二级菜单后要跳转到另一个页面(视图ID,xml文件)、另一个页面上要有数据、要有展现形式(tree/form)
【学习内容】
4.record标签&field标签
这两个标签是Odoo视图开发中使用最为频繁的标签。一般使用<record></record>标签来加载视图中所需的各个字段,其中又以<field></field>标签来声明字段中所必须的一些属性信息。两者都是将Odoo视图中的关键内容进行“包裹”,使其执行起来井然有序。具体可参考图2-4-1:
学习笔记:
- record,记录,是一行行的数据
- field,字段,是表上的列
【学习内容】
5.tree&form的区别
这两个视图类型是Odoo开发中最为常见,关系也最为紧密。tree这一类型的视图,顾名思义就是列表,将一个包含许多字段的完整信息以列表的方式展现。具体可如图2-5-1所示:

在代码中,tree视图的定义也非常简单,申明该视图唯一标识名称,id以及其它所需字段,最后再声明该视图类型为tree,可以快速地在浏览器生成对应的列表,代码示例如图2-5-2:

学习笔记:
- tree视图,就是上图所示的列表,并不是结构化的树形图。
- 看这段代码,default_order = "modifiedtime desc ,表示这个tree视图按照“modifiedtime”这个字段降序排列。
- button 标签,name是这个按钮的名字;string = "查看",表示按钮要显示出指定文本信息“查看”。
- field标签,name = "pipelineid",表示项目编号这个字段,这个字段默认显示的文本信息是“项目编号”,所以无需再写出string = "项目编号"。
- field标签,name = "endusername",表示最终用户名称这个字段,这个字段默认显示的文本信息是“最终用户名称”,所以无需再写出string = "最终用户名称"。
- field标签,name = "amount",表示项目金额这个字段;string = "项目金额",表示这个字段要显示出指定文本信息“项目金额”。
- field标签,name = "currencyid",表示所用币种这个字段;string = "所用币种",表示这个字段要显示出指定文本信息“所用币种”。
- field标签,name = "expectdsigndate",表示预计签约时间这个字段;string = "预计签约时间",表示这个字段要显示出指定文本信息“预计签约时间”;widget = "date",表示显示出日期类型,使用了日期控件。
- field标签,name = "progressrate",表示销售进度这个字段;string = "销售进度",表示这个字段要显示出指定文本信息“销售进度”;widget = "progressbar",表示显示进度条,使用了进度条控件。
- field标签,name = "modifiedtime",表示更新时间这个字段;string = "更新时间",表示这个字段要显示出指定文本信息“更新时间”;widget = "date",表示显示出日期类型,使用了日期控件。
【学习内容】
而form表单,则可以看作是存储某一条记录的详细页面,一般而言可以在该页面进行编辑、保存、取消保存以及返回至tree页面。具体的形式多以下拉选择框、文本框、按钮和类选择器来展现,示例可如图2-5-3:

同样地,我们来看看在代码中是如何实现这样的效果的。field标签依然要被使用到,声明该表单的名称,以及一些显示字段名称,最重要的是有下拉框的声明,所需日期类型的以及字段类型等。

学习笔记:
- field标签,name = "id";string = "项目编号",表示这个字段显示指定文本信息"项目编号";placeholder = "-请输入项目编号",表示字段未填入信息时显示的提示信息为“-请输入项目编号”;widget = "selection",表示显示出下拉列表,使用了下拉列表控件。
- field标签,name = "donetime";string = "预计签约日期",表示这个字段显示指定文本信息"预计签约日期";placeholder = "-请选择预计签约日期",表示字段未填入信息时显示的提示信息为“-请选择预计签约日期”;widget = "date",表示显示出日期,使用了日期控件。
- field标签,name = "price";string = "项目金额",表示这个字段显示指定文本信息"项目金额";placeholder = "-请输入项目金额",表示字段未填入信息时显示的提示信息为“-请输入项目金额”;widget = "domain",这个不懂。
tree和form:
-
在HTML里,form是专用名词,用于列出东西让用户填写、再返回服务器的。在浏览器里填写数据、再由浏览器回传给服务器/数据库的页面。
-
增和改必须用form,有时候删也需要用form。
-
tree是用数据库的数据来展示出来的。
-
tree是服务器把信息给我看的。form是我把数据给服务器的。
以上学习笔记仅仅是个人理解,不一定正确,若同学发现有不对之处,恳请指正,谢谢。
本文是Odoo学习笔记的第一部分,主要介绍了模型(Models)和视图(Views)。模型部分讲解了Model的含义、name和description属性、function函数修饰器以及常见字段属性。视图部分涉及menuitem标签、parent属性、action属性,以及tree和form视图的区别。文章通过学习笔记的形式,深入浅出地阐述了Odoo开发中的基本概念和关键要素。

1193

被折叠的 条评论
为什么被折叠?



