Odoo|“视图”和“模型”之间的数据传输

news2024/11/23 19:05:43

01前言

今天带领大家学习Odoo系统中“视图”与“模型”之间的数据传输。看题目我们可以知道,这篇文章是面向的是Odoo的初学者。Odoo作为当前最普遍的二开ERP系统,其开源,模块化,灵活开发的属性使得它在ERP相关领域十分受青睐。

Odoo系统是一个现代化的商业应用ERP组件,使用的是Python语言开发。它的开发过程都是模块化的。是典型的模型-视图-控制器(MVC)结构。那么,今天就让我们来探究一下Odoo系统中最主要的Model和View层之间数据是如何传输的。

02详细介绍

首先,我们应该知道Odoo的View层是使用xml格式来编写的。因为Odoo它本身就是一个低代码的平台,当我们按照Odoo的xml编写规范来对View视图进行页面布局时,在Odoo内部的编译就会将xml文件转换成Html的形式。所以当我们把视图呈现给用户的时候,根本就不需要困扰xml如何去解析哦!

接下来我们来看一下Odoo的目录结构:

img

模块的文件夹列表及对应作用:

  • data/演示和实际数据的m
  • models/模型定义,实体类。
  • control1ers/包含控制器
  • views./包含视图和模板
  • static/包含页面相关的,一般划分为css/,/js,/img
  • 其他可选的文件夹:
  • wizard./放临时的model和视图
  • report/存放报表相关的python对象和xml
  • tests/存放python和yml测试用例

实际上Odoo的用户视图界面、安全规则、权限配置等数据都是储存在特殊的数据表中的。然后当我们在模块中编写xml、csv等文件时,并不是在Odoo运行时使用,而是在Odoo运行前,把我们定义好的那些视图、规则等全部加载到对应的数据库表中。所以我们每次改动之后,都需要在Odoo菜单页点击“升级”之后才能把我们的修改呈现出来。

**/****/**View层

说到View层,那么如何在xml文件中定义我们想要的视图呢?

按照Odoo的格式,在xml数据文件里必须以为顶级元素,就像用元素定义网页一样。然后可以有多个元素来记录数据。

一个元素里有2个必要的属性:

  • Model:关联的模型类
  • id:数据的外部id和多个用来绑定字段的元素。

说到元素,它可是我们最常用的元素呢!我们可以使用元素的name属性来绑定Model中的某一个字段。然后根据字段的类型来进行不同样式的显示。比如char类型的文本框,Many-to-one类型的下拉框等等。

除此之外,元素还有很多常见的属性:

  • String:标签文本。这里的定义是可以重写Model层中已经定义的文本的
  • Help:帮助文档。当鼠标选停的时候可以会显示此文本
  • Placeholder:创建时输入框中默认显示的内容(数据库中没有)
  • Widget:窗口显示的控件
  • Options:json形式的可选参数。用来给窗口传递参数
  • Class:CSS样式
  • Invisible:字段是否可见(true:不可见,false:可见)
  • Readonly:只读模式
  • Required:必填项
  • Password:输入类型变成密码格式显示

另外在xml视图中还有很多Odoo特有的表达式和规则。

  • domain表达式:它是用来过滤数据记录的表达式,它的本质是通过Odoo的ORM模型把表达式的值转换为sql的where子句。例如:domain="[(‘id’,‘=’,‘1’ )]"相当于where id = 1;
  • label元素:它通常用来控制字段在视图中的显示。
  • Context:用于传递的上下文数据。
  • 关系字段:options={‘no_open’: True, ‘no_create’ : True},这个是把Odoo默认的表单操作按钮隐藏的属性。这个也很常用呢。

当我们编写完一个xml视图的时候,首先需要在*mainfest.py*清单文件中进行声明,在这里会根据“depends”声明本模块所需要用到的其他模块、根据“data”声明本模块需要被加载处理的xml文件。

img

然后我们需要添加菜单列表,通过菜单的下拉框来跳转到自己的视图之中。菜单选项被存储在menu.xml文件中。

img

但是仅仅添加菜单列表是不能实现跳转动作的,还需要添加窗口动作。

窗口动作通常与菜单和按钮结合在一起。用于返回一个被调度的窗口。还可以通过context来传递上下文信息。一般窗口动作的格式如下所示。

img

● Name:在视图层显示的窗口动作的名称。

● Res_Model:这个动作需要调用的模型。

● View_mode:视图显示模式。

● Res_id:这个窗口的外部id。

● Type:窗口命令的类型。

**/****/**Model层

在前面讲View层的时候可以知道,每个视图的元素都有一个必要的属性Model属性。它是用来绑定Model层的。由于Odoo自身有封装好的持久层框架,所以我们基本上不需要对持久化数据有过多的关注。

在模型类中可以添加附加的属性来给模型增加很多Odoo特有的属性。如下是常用的模型类属性:

  • **_name:**这是用来标记新创建的模型类的字符。一般用来被绑定使用。
  • **_description:**这是用于描述当前的模型类的属性。没有特别的作用。
  • **_rec_name:**在关联的模型类中,用来描述这个模型的字段。一般用于显示many2one类型的标识字段。
  • **_table:**Odoo会在指定数据库生成相关的数据表。默认是通过把.改成_来作为数据库名创建表。
  • **_inherit:**用来表示继承。父模型和子模型直接的继承。

Odoo的模型的概念就像大家熟悉的实体类Entity一样,但是又比其更方便,容易上手一些。但是Model类的本质还是Python类,所以不要忘记在*init.py*文件下加入,让它变成一个包文件哦。

Odoo的所有实体类在被加载的时候都是被存放在缓存中的一个存储块中,Odoo称它为中心注册处。在这里,通过模型类的name保存着所有与这个Odoo模型类有直接的联系的数据。所以我们可以使用self.env[‘x’]来获取这个模型类x。可以使用self.env[‘x’].def来调用这个模型类中的def方法。

一般的Model模型有着如下结构:

img

  • Char : 字符型,size属性定义长度

  • Text :文本型,没有长度限制

  • Selection :下拉框。

  • Date :短日期,年月日,在vies层通过日历选择框显示。

  • Datetime :时间戳

  • Boolean : 布尔类型

  • Binary :二进制数据,在视图层显示为一个文件上传按钮,可以把图片,音频,视频,文档以二进制形式保存。

  • Many-to-one :是多对一关系,表示一个字段的扩展表,它常用的属性有

    -comodel :关联的其他模型名称;

    -string :字符串名称;

    -context : 是一个字典,表示在视图层传递信息。通 常可以用来设置默认值;

    -domain :domain规则进行过滤。

新添加的模型还有一项必不可少的步骤,那就是配置加载权限。Odoo使用的是csv文件,通过把csv文件里的列表数据加载到*“ir.model.access”*模型中实现。所以通常把这也的csv文件名称定义为“ir.model.access.csv”。

img

03总结

通俗来讲设计一个用户视图,就是使用xml文件来把Odoo中的UI设计从数据库中拉出来按照自定义的规则来显示给用户。一个xml视图绑定一个主表模型类,然后通过元素的name属性来绑定模型类中的字段。这个字段通过Odoo的持久层框架又绑定到数据表中的字段,就这样相互的作用。前面也说过,视图只是一种呈现,所以,我们其实可以自己定义方法来对模型中的数据进行处理,甚至可以直接手写模型的数据。究竟如何呈现就要看程序员小哥哥的创造性了。

所以分析到现在,你搞懂Odoo的View层和Model层直接的数据传输了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1178674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动作捕捉系统通过SDK与MATLAB/Simulink通信

NOKOV度量动作捕捉系统支持通过SDK与MATLAB/Simulink通信,将动作数据传入MATLAB/Simulink进行实时解算。 一、形影软件设置 1、在形影软件中加载数据 2、选择网卡地址 3、勾选“使用SDK” 4、点击播放按钮。这时候SDK的数据就已经向外发送了 二、MATLAB接收数据…

pytest中的pytest.ini

[pytest] filterwarnings ignore::DeprecationWarning addopts -v -s markers uat:1 smok:2 log_cli1 xfail_strict True filterwarnings ignore::DeprecationWarning 这个的功能就是 test_login.py::Test_login::test_login_correct_password PASSEDwarnings summary …

elasticsearch下载和安装(linux)看这一篇就够了

配置java环境(11版本以上) 1.下载安装包 我是放在usr下的java里了 2.解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz3.配置环境变量 vim /etc/profile在文件的最下面添加 JAVA_HOME/usr/java/jdk-17.0.9 #你自己的安装路径 JRE_HOME$JAVA_HOME/jre C…

superset study day01 (本地启动superset项目)

文章目录 什么是superset?superset文档 superset开发环境搭建superset后端环境1. 新建数据库2. 环境配置3. 修改py文件4. 迁移数据库5. 启动项目 superset 前端代码打包搭建完成,效果页面 什么是superset? Apache Superset™ 是一个开源的现代数据探索和可视化平台。 Super…

CBAM:Convolutional Block Attention Module

CBAM(Convolutional Block Attention Module)是一种深度学习领域的注意力机制,旨在增强卷积神经网络对图像特征的建模和表示能力。CBAM引入了通道和空间两种不同的注意力机制,使模型能够动态调整特征图的权重,以适应不…

Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

文件处理是任何Web应用程序的重要部分。Python有多个用于创建、读取、更新和删除文件的函数。 文件处理 在Python中处理文件的关键函数是open()函数。open()函数接受两个参数:文件名和模式。 有四种不同的方法(模式)可以打开文件&#xff…

[直播自学]-[汇川easy320]搞起来(2)看文档

2023.11.06.NIGHT 一 、读 《Easy320可编程逻辑控制器用户手册-CN-A02.PDF》 21:30 好现在看文档 里面提到 I/O滤波可设置: I/O支持短路保护,I/O指示灯程序控制 热量是向上走的,而PLC是大脑,所以放到最下面&am…

Qt 继承QAbstractTableModel实现自定义TableModel

1.简介 QAbstractTableModel为将数据表示为二维项数组的模型提供了一个标准接口。它不直接使用,但必须进行子类化。 由于该模型提供了比QAbstractItemModel更专业的接口,因此它不适合与树视图一起使用,尽管它可以用于向QListView提供数据。…

Ansible playbook自动化运维工具详解

Ansible playbook自动化运维工具详解 一、playbook的相关知识1.1、playbook 的简介1.2、playbook的 各部分组成 二、基础的playbook剧本编写实例三、 playbook的定义、引用变量3.1、基础变量的定义与引用3.2、引用fact信息中的变量 四、playbook中的when条件判断和变量循环使用…

Swin Transformer V2:扩展容量和分辨率

目标检测是计算机视觉的一个任务,它将指定的输入图像或视频帧转换为对象识别、定位和分类的结果。它非常类似于分类,但添加了定位的元素,它可以确定图像中的特定对象所在的位置。主要用于物体识别、跟踪和车牌识别。 Swin Transformer V2 ✅…

想入行单片机开发的学生们的忠告

想入行单片机开发的学生们的忠告 做嵌入式单片机开发十来年。想给那些想入行单片机开发的同学一些建议。 1.想做这行,做好坚持学习的准备。最近很多小伙伴找我,说想要一些单片机的资料,然后我根据自己从业十年经验,熬夜搞了几个通…

SPSS协方差分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

【C++】构造函数和析构函数第三部分(各种构造函数调用规则、多个对象的构造和析构、初始化列表)--- 2023.11.6

目录 各种构造函数的调用规则对象以值的方式给函数参数用一个已有的对象去初始化另一个对象函数的局部对象以值的方式从函数返回调用规则1调用规则2 多个对象的构造和析构初始化列表结束语 各种构造函数的调用规则 对象以值的方式给函数参数 实例: class Maker {…

思维模型 布里丹毛驴效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。犹豫不决是病,得治~ 1 布里丹毛驴效应的应用 1.1 犹豫不决的产品“施乐 914” 20 世纪 60 年代,美国一家名为施乐(Xerox)的公司…

如何在CPU上进行高效大语言模型推理

大语言模型(LLMs)已经在广泛的任务中展示出了令人瞩目的表现和巨大的发展潜力。然而,由于这些模型的参数量异常庞大,使得它们的部署变得相当具有挑战性,这不仅需要有足够大的内存空间,还需要有高速的内存传…

5+单细胞+铜死亡+实验,干湿结合生信思路,有条件做实验的可模仿

今天给同学们分享一篇生信文章“Single-cell transcriptomics reveals immune infiltrate in sepsis”,这篇文章发表在Front Pharmacol期刊上,影响因子为5.6。 结果解读 作者研究的流程图 作者首先制定了这项研究的总体技术路线,如图1所示。…

UVM源码--uvm_component 浅析(一)

目录 1. uvm_object 2. uvm_component 3. 为什么在uvm_component 例化是需要指定一个parent? 4.uvm_component 的树形结构是如何组织起来的? 5. 静态函数与非静态函数的区别: 6. uvm_root 的单实例实现思路: 7. run_test 的…

动态头:用注意力统一目标检测头

目标检测是回答计算机视觉应用中“哪些目标位于哪里”的问题。在深度学习时代,几乎所有现代目标检测器共享相同的范式——特征提取的主干和定位和分类任务的头部。如何提高目标检测头的性能已经成为现有目标检测工作中的一个关键问题。检测头应该是尺度感知&#xf…

modelscope适配昇腾NPU

注意 我只做了raner,raner-50cls,corom这三个模型的适配,不能保证其他模型同样好使。 我的环境信息 NPU: Atlas 300I Pro Modelsope: 1.9.4(最好要使用这个版本呀,因为后面要改一下源码) python: 3.8 torch: 2.0.1 内核以…

深度学习之基于YoloV5交通信号标志识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YoloV5交通信号标志识别系统介绍 基于YoloV5的交通信号标志识别系统是一种深度学习应用,旨在通过使…