分享

Odoo里模型和视图那些事儿...

 F2967527 2022-07-14 发布于北京

转载:https://blog.csdn.net/CBGCampus/article/details/119325442

前言

Odoo的前世今生大家想必或多或少都有了解,知道它是针对 ERP 的应用场景而出现的开源免费的纯B/S架构的系统,其所需模块可由用户安装、卸载甚至是快速的定制开发。对于企业的ERP需求来说,Odoo可方便快速地进行迭代更新,来是适应公司8-10年甚至长远地发展,大大降低了ERP系统的开发和维护成本。

之前讲过一篇基于Odoo脚手架工具来搭建第一个自定义模块的文章,主要讲解的是利用Odoo源码中自带的Models和Views相关代码,实现简单的tree(列表)和form(表单)之间的跳转功能,并进行简单的字段编辑、保存与查看等。

话不多说,今天我们来理清Odoo开发中这对儿最为重要的关系之一:模型(Models)和视图(Views)。

该怎样来总结和形容这两者的关系呢?简单地说,前者负责处理逻辑,后者负责展示视图;形象地说,Models就像是导演和编剧,而Views就是演员和屏幕。两者不可分割,各司其职将一个Odoo应用中的各种功能准确无误地供用户使用。
一、关于模型(Models)

对于模型的讲解本文将从Python类变量、name属性、function函数(修饰器)以及字段属性来为大家讲解。

Model是存储数据记录的最主要手段,它是持久化地对数据记录(record)进行存储,直至对其进行删除。几乎所有的自定义模块都会继承自models.Model,可以存储数据库中所有开发所需的数据与字段。
1.models.Model

这里的models和Model的含义是不一样的。前者指的是Odoo的模型对象,也就是我们开发Odoo时所需要用到的.py文件;后者指的是对于列表、字典、自定义类这些可变变量,如果将其作为类变量,则是传引用——即所有对象的类变量公用一个内存地址。这是Python语言的语法所规定的,其定义代码可由图1-1-1示例:

2.name属性和description属性

name属性是模型中的必填属性,Odoo里Class的唯一标识,并且在整个模型文件的全局不能够重复。

description是描述属性,只在查看模型界面的时候作为展示使用,没有实际用户。它可选不填,但好的编码习惯我们应该书写尽量详尽的描述。
3.function函数(修饰器)

@api.multi:对记录集进行操作的方法需要添加此修饰器,此时self就是要操作的记录集。所以方法内应该对self进行遍历,例如图1-3-1所示:

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

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: 控制字段权限,为字段分权限组,只有处于该权限组的用户可见该字段。
二、关于视图(Views)

对于视图这部分知识点的讲解,将从其标签、属性、XML文件等方面出发,为大家做一些尽可能详细易懂的介绍。

前面说到了Views是为用户提供视图界面的,那么在这里着重详细介绍一下Odoo开发中最为常见的一种视图间的跳转。即具体包括以下5个步骤:

a. 从菜单的下拉框中选中自己开发的某个子菜单;

b. 并编辑该子菜单需要展示的字段(重点);

c. 将该菜单的内容以tree 的形式显示;

d. 编辑该tree所对应的form页面并显示(重点);

e. 实现对数据的保存与查看。

下面就是每个步骤中会使用到的关键知识点,把这些都整明白的话,那掌握视图部分开发的基本流程已无大碍。
1.menuitem标签

这是菜单的专属标签,所谓菜单,就是一层层的点击过后,会逐一展示出不同内容的页面基本元素。代码示例可如图2-1-1所示:

上图代码对应在浏览器实现的页面效果可如图2-1-2所示:

2.parent属性

这个属性在视图与视图之间的关联中起着非常关键的作用:parent可以作为某一视图的父属性,从而关联到另一id名称为该视图名称的另一视图。并且在安装了Pycharm Odoo插件后按住Ctrlt同时点击鼠标,可以进行直接的跳转。具体用法如图2-2-1所示:

3.action属性

action则是一个动作事件的总称,它的效果是可以定义和执行一些需要被使用到的XML文件,同时声明一些该XML文件的必要属性:动作id、指定的视图类型、所要展示的视图id等,具体可如图2-3-1所示:

讲到这里我们不难发现,Odoo视图属性之间的关联性非常的强几乎就是直接的关联和跳转。于是前端代码的编写时间便得到了节约,正是如此有效率地实现某些必须的的功能,才将Odoo“低代码”的特性发挥地淋漓尽致。

4.record标签&field标签

这两个标签是Odoo视图开发中使用最为频繁的标签。一般使用<record></record>标签来加载视图中所需的各个字段,其中又以<field></field>标签来声明字段中所必须的一些属性信息。两者都是将Odoo视图中的关键内容进行“包裹”,使其执行起来井然有序。具体可参考图2-4-1:

5.tree&form的区别

这两个视图类型是Odoo开发中最为常见,关系也最为紧密。tree这一类型的视图,顾名思义就是列表,将一个包含许多字段的完整信息以列表的方式展现。具体可如图2-5-1所示:

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

而form表单,则可以看作是存储某一条记录的详细页面,一般而言可以在该页面进行编辑、保存、取消保存以及返回至tree页面。具体的形式多以下拉选择框、文本框、按钮和类选择器来展现,示例可如图2-5-3:

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

三、总结

Odoo中,一切皆模型,连视图都是模型。Odoo将各种数据,如:权限数据、类数据、视图数据等,按照模型分表存储。然后在查看时,按照索引从各个表格读取信息,组合成我们看到的内容每种类型的视图都代表一种可视化模式,不同的视图具有不同的功能性。比如 form(称为表单视图),它提供表单给用户创建、编辑记录数据;tree (列表视图),它提供给用户简化的、直观的数据数据详情。当然,在使用特定的属性后,列表视图也可以像表单视图对数据进行创建、编辑等操作,但有一定的局限性。

以上就是对Odoo模型与视图关系的讲解,不严谨之处还望大家指正。
————————————————
版权声明:本文为CSDN博主「神州数码云基地」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CBGCampus/article/details/119325442

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多