odoo17 | 用户界面的基本交互

news2024/11/18 9:20:22

前言

现在我们已经创建了我们的新模型及其 相应的访问权限,是时候了 与用户界面交互。

在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。

数据文件 (XML)

Odoo在很大程度上是数据驱动的,因此模块定义的很大一部分是 它管理的各种记录的定义:UI(菜单和视图)、 安全性(访问权限和记录规则)、报告和纯数据都是 通过记录定义。

结构

在Odoo中定义数据的主要方法是通过XML数据文件: 广泛的结构 XML 数据文件如下:

  • 根元素中任意数量的操作元素odoo
<?xml version="1.0" encoding="UTF-8"?>
<!-- the root elements of the data file -->
<odoo>
    <operation/>
    ...
</odoo>

数据文件是按顺序执行的,操作只能参考结果 先前定义的操作数

如果数据文件的内容预计只应用一次,则可以将odoo标志 noupdate 设置为1
如果文件中的部分数据预计只应用一次,则可以将文件的这部分放在
<data noupdate= " 1 " >域中。

<odoo>
    <data noupdate="1">
        <!-- Only loaded when installing the module (odoo-bin -i module) -->
        <operation/>
    </data>
    <!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
    <operation/>
</odoo>

核心业务

record标签

Record适当地定义或更新一个数据库记录,它具有以下属性:

model (required)

要创建(或更新)的模型的名称

id

此记录的外部标识符。强烈建议提供一个

  • 对于记录创建,允许后续定义修改或引用该记录
  • 对于记录修改,需要修改的记录
context

创建记录时要使用的上下文

forcecreate

在更新模式下,如果记录不存在,是否应该创建记录
需要一个外部id,默认为True。

field 标签

每个记录都可以由字段标记组成,这些字段标记定义了要在创建记录时设置的值。没有字段的记录将使用所有默认值(创建)或什么都不做(更新)。

字段有一个强制的name属性,要设置的字段名,以及定义值本身的各种方法:

Nothing

果没有为该字段提供值,则将在该字段上设置隐式False。可用于清除字段,或避免使用字段的默认值。

search

对于关系字段,应该是 domain 上字段的模型。

将计算域,使用它搜索字段的模型,并将搜索结果设置为字段的值。如果字段是Many2one,将只使用第一个结果。

ref

如果提供了一个ref属性,它的值必须是一个有效的外部id,它将被查找并设置为字段的值。

主要用于 Many2one 和 Reference 字段。

type

如果提供了类型属性,则使用它来解释和转换字段的内容。字段的内容可以通过使用file属性的外部文件提供,也可以通过节点的主体提供。

可用的类型有:

xml, html

将字段的子字段提取为单个文档,计算表单指定的任何外部id %(external_id)s. %。%可用于输出实际的%符号。

file

确保字段内容是当前模型中的有效文件路径,将pair模块、路径保存为字段值

char

将字段内容直接设置为字段的值,无需更改

base64
base64对字段的内容进行编码,与file属性结合使用,可以将图像数据加载到附件中

int

将字段的内容转换为整数,并将其设置为字段的值

float

将字段的内容转换为浮点数并将其设置为字段的值

list, tuple

应该包含任意数量的与字段具有相同属性的值元素,每个元素解析为生成的元组(tuple)或列表(list)中的一项,并且生成的集合被设置为字段的值

eval

对于前面的方法不合适的情况,eval属性简单地计算它提供的Python表达式,并将结果设置为字段的值。

计算上下文包含各种模块(time、datetime、timedelta、relativedelta)、一个解析外部标识符的函数(ref)和当前字段的模型对象(obj)(如果适用)。

delete标签

delete标签可以删除以前定义的任意数量的记录。它具有以下属性:

model (required)

应该在其中删除指定记录的模型

id

要删除的记录的外部id

search

用于查找要删除的模型记录的域
id 和search 是互斥的

function标签

function标签调用模型上的方法,并提供参数。它有两个强制参数model和name,分别指定要调用的模型和方法的名称。

参数可以使用eval(应求值为一系列参数,以便调用该方法)或值元素(请参阅列表值)来提供。

<odoo>
    <data noupdate="1">
        <record name="partner_1" model="res.partner">
            <field name="name">Odude</field>
        </record>

        <function model="res.partner" name="send_inscription_notice"
            eval="[[ref('partner_1'), ref('partner_2')]]"/>

        <function model="res.users" name="send_vip_inscription_notice">
            <function eval="[[('vip','=',True)]]" model="res.partner" name="search"/>
        </function>
    </data>

    <record id="model_form_view" model="ir.ui.view">
        ...
    </record>
</odoo>

快捷标签

由于Odoo的一些重要结构模型复杂且涉及面广,数据文件提供了更简短的替代方案,可以使用记录标签来定义它们

menuitem标签

定义具有许多默认值和回退的记录:ir.ui.menu
以下是menuitem标签包含的属性:

parent

如果设置了属性,则它应该是其他菜单项的外部 ID,用作新项的父项parent

如果未提供,则尝试解释该属性 作为以 -SEPARATED 分隔的菜单名称序列,并在菜单中找到一个位置 等级制度。在这种解释中,中间菜单是自动的 创建parentname/

否则,菜单被定义为“顶级”菜单项(而不是菜单 没有父母)

name

如果没有指定name属性,则尝试从链接操作(如果有)获取菜单名称。否则使用记录的id

groups

属性被解释为模型的外部标识符的逗号分隔序列。如果外部标识符以减号 () 为前缀,则组 已从菜单的组中删除groupsres.groups-

action

如果指定,则该属性应为菜单打开时要执行的操作的外部 IDaction

id

菜单项的外部 ID

template标签

创建一个 QWeb 视图,只需要视图的部分,并允许一些可选属性:arch

id

视图的外部标识符

name, inherit_id, priority

与ir.ui.view上对应的字段相同(注意:inherit_id应该是一个外部标识符)

primary

如果值设置为True并结合一个inherit_id属性,则将视图定义为主视图

groups

以逗号分隔的组外部标识符列表

page

如果值设置为"True" ,则模板是一个网站页面(可链接到, 可删除)

optional

只为enabled或者disabled,是否可以禁用视图(在 网站界面)及其默认状态。如果未设置,则视图始终为 启用。

在上一节文章中,我们通过 CSV 文件添加了数据。The CSV 当要加载的数据具有简单的格式时,格式很方便。当格式更复杂时 (例如,加载视图或电子邮件模板的结构),我们使用 XML 格式。例如 此帮助字段包含 HTML 标记。虽然可以通过CSV文件加载此类数据,但它更多 方便使用 XML 文件。

XML 文件必须添加到与 CSV 文件相同的文件夹中,并在 .数据文件的内容也会在安装模块或 更新,因此对 CSV 文件所做的所有备注都适用于 XML 文件。 当数据链接到视图时,我们会将它们添加到文件夹中。manifest.py views

在本章中,我们将通过 XML 文件加载第一个操作和菜单。操作和菜单是 数据库中的标准记录。

注意

当性能很重要时,CSV 格式优先于 XML 格式。Odoo就是这种情况 其中加载 CSV 文件比加载 XML 文件快。

在Odoo中,用户界面(操作、菜单和视图)主要通过创建 以及编写 XML 文件中定义的记录。一种常见的模式是“菜单”>“操作”>“视图”。 要访问记录,用户需要浏览多个菜单级别;最深的层次是 触发打开记录列表的操作。

行动

目标:在本节结束时,应在系统中加载一个操作。我们不会看到 任何内容,但文件应加载到日志中:

INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml

可以通过三种方式触发操作:

  1. 通过单击菜单项(链接到特定操作)
  2. 通过单击视图中的按钮(如果这些按钮与操作相关联
  3. 作为对象上的上下文操作

在本章中,我们将只介绍第一种情况。第二种情况将在后面的章节中介绍,而最后一种情况是 高级主题。在我们的房地产示例中,我们希望将菜单链接到模型,以便能够创建新记录。该操作可以看作是菜单之间的链接 和模型。estate.property

我们的基本行动是:estate_property_action

<record id="estate_property_action" model="ir.actions.act_window">
    <field name="name">房地产动作</field>
    <field name="res_model">estate.property</field>
    <field name="view_mode">tree,form</field>
</record>
  • id是外部标识符。它可以用来引用记录 (不知道其数据库内标识符)。
  • model具有固定值 ir.actions.act_window
  • name是操作的名称。
  • res_model是操作应用到的模型。
  • view_mode是将可用的视图;在本例中,它们是列表(树)视图和窗体视图。 我们稍后将看到可以有其他视图模式。

添加操作

在相应的文件夹中创建文件estate/views/estate_property_views.xml,并在文件中定义它。在清单文件__manifest__.py中的data属性中添加视图文件路径

 'data': [
        'security/ir.model.access.csv',
        'views/estate_property_view.xml',
    ],

重新启动服务器,您应该会看到日志中加载的文件。

菜单

目标:在本节的末尾,应创建三个菜单,默认视图为 显示:

一级菜单显示
在这里插入图片描述
二级菜单显示
在这里插入图片描述
三级菜单显示
在这里插入图片描述

为了减少声明菜单(ir.ui.menu)并将其连接到相应操作的复杂性,我们可以使用标签。

我们的基本菜单是:action_estate_property

<menuitem id="properties_menu_action" name="广告信息" action="action_estate_property"/>

菜单链接到操作 ,并且操作 链接到模型。如前所述,该操作可以看作是链接 在菜单和模型之间。

但是,菜单始终遵循体系结构,实际上有三个级别的菜单:

  • 根菜单,显示在应用程序切换器中(Odoo社区应用程序切换器是 下拉菜单)

  • 第一级菜单,显示在顶部栏中

  • 操作菜单
    在这里插入图片描述
    在这里插入图片描述

根菜单、第一级和操作菜单
定义结构的最简单方法是在 XML 文件中创建它。一个基本的 我们的结构是:

<!-- 一级菜单-->
    <menuitem id="estate_property_menu_root" name="房地产广告模块" sequence="1" />
      <!-- 二级菜单-->
    <menuitem id="advertisements_menu" name="广告宣传" sequence="1"  parent="estate_property_menu_root"/>
         <!-- 三级菜单-->
    <menuitem id="properties_menu" name="广告信息" sequence="1"   parent="advertisements_menu" action="action_estate_property"/>
  • 第三个菜单的名称取自操作的名称(action)。

添加菜单

  • 在相应的文件夹中(estate/view/estate_menus.xml)创建文件,并在文件中定义它。
  • 在__manifest__.py文件配置data 添加 ‘view/estate_menus.xml’
   'data': [
        'security/ir.model.access.csv',
        'views/estate_menus.xml',
        'views/estate_property_view.xml',
    ],

重启服务,更新应用程序即可!!!

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

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

相关文章

桌面天气预报软件 Weather Widget free mac特点介绍

Weather Widget free for Mac多种吸引人的小部件设计可供选择&#xff0c;可以随时了解天气&#xff01;还可以在Dock和菜单栏中为您提供简短的天气预报或当前状况的概述。 Weather Widget free for Mac软件介绍 始终在桌面上使用时尚的天气小部件来随时了解天气&#xff01;多…

团结引擎正式发布,已开放下载

2024年1月1日&#xff0c;Unity 正式发布了针对中国开发者的引擎--团结引擎创世版&#xff0c;现在已经可以开放下载&#xff0c;想体验的小伙伴们可以到官网下载了。 团结引擎是专为中国开发者定制的实时3D引擎&#xff0c;目前是基于Unity 2022LTS版本开发的。团结引擎内置了…

我用 Python 自动生成图文并茂的数据分析报告

reportlab是Python的一个标准库&#xff0c;可以画图、画表格、编辑文字&#xff0c;最后可以输出PDF格式。它的逻辑和编辑一个word文档或者PPT很像。有两种方法&#xff1a; 1&#xff09;建立一个空白文档&#xff0c;然后在上面写文字、画图等&#xff1b; 2&#xff09;建…

24、Web攻防——通用漏洞SQL注入MYSQL跨库ACCESS偏移

文章目录 一、SQL注入原理   脚本代码在与数据库进行数据通讯时&#xff08;从数据库取出相关数据进行页面显示&#xff09;&#xff0c;使用预定义的SQL查询语句进行数据查询。能通过参数传递自定义值来实现SQL语句的控制&#xff0c;执行恶意的查询操作&#xff0c;例如查询…

Kali Linux实现UEFI和传统BIOS(Legacy)引导启动

默认Kali linux安装会根据当前启动的引导模式进行安装 例:以UEFI引导启动安装程序,安装后仅能在UEFI引导模式下进入系统 安装Kali系统 这边基于VirtualBox虚拟机镜像实战操作 首先创建一个Kali虚拟机 这里需要注意,把启动 EFI (只针对某些操作系统)选项勾选上,内存、处理器…

TPS5430正负电源模块

TPS5430正负电源模块 Chapter1 TPS5430正负电源模块一、芯片重要参数二、tps5430参考电路讲解以及PCB布局1.正压降压&#xff08;15V转12V&#xff09;2.正压降负压&#xff08;15V转-12V&#xff09; Chapter2 使用tps5430制作正负DC-DC降压电源&#xff0c;tps7a47和tps7a33制…

使用sdf文件+urdf文件模拟机器人示例(不用把urdf转sdf)

gazebo版本&#xff1a;harmonic&#xff1b; <launch> <group> <let name"robot_description" value"$(command xacro $(find-pkg-share gazebo_pkg)/urdf/total.xacro)"/> <node pkg"rviz2" exec"rviz2" name…

微信公众号内网穿透本地调试微信授权

微信公众号内网穿透本地调试一直以来都比较麻烦 怕自己忘记&#xff0c; 记录一下 准备 natapp获取一个域名隧道下载nginx配置微信公众号web网页授权域名 1.natapp获取一个域名隧道 在natapp官网&#xff08;https://natapp.cn/&#xff09;进行注册登录后&#xff0c;进入…

零售业物流这个防漏水技术,居然没有翻车!

随着科技的不断发展&#xff0c;水浸监控系统在各个领域得到了广泛应用。水浸监控不仅仅是为了保护建筑结构和设备&#xff0c;更是为了防范因水灾引起的生命安全和财产损失。 因此&#xff0c;为了有效预防和应对水浸事件&#xff0c;水浸监控系统应运而生&#xff0c;成为各行…

基于决策树、随机森林和层次聚类对帕尔默企鹅数据分析

作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注哦&#x…

c语言-整型在内存的存储

文章目录 前言一、整型数值在内存中的存储1.1 整型数值的表示形式1.2 二进制的表示形式1.3 整数在内存中存储 二、大端字节序存储和小端字节序存储2.1 大端字节序存储2.2 小端字节序存储2.3 练习 总结 前言 本篇文章叙述c语言中整型数据在内存中的存储方式。 一、整型数值在内…

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

在较高时间周期 这些现货黄金投资法值得一用

以日线图和周线图为代表的较高时间周期&#xff0c;一直是投资者很少利用的。之所以这么说&#xff0c;不是说投资者不会在日线图上分析&#xff0c;而是很少利用日线图交易。一来持仓过夜&#xff0c;会有相关的费用产生。二来很多人做现货黄金以短线为主。其实这种较高的时间…

Windows中磁盘未知没有初始化怎么办?

当我们尝试在Windows11/10/8/7上使用外部硬盘驱动器时&#xff0c;在小概率情况下可能会遇到磁盘未知没有初始化情况&#xff0c;此时如果您进入磁盘管理工具中查看&#xff0c;将会发现您的外部硬盘驱动器显示为未知、未初始化、没有磁盘空间&#xff0c;或者在某些情况下它还…

阿里云服务器8080端口安全组开通图文教程

阿里云服务器8080端口开放在安全组中放行&#xff0c;Tomcat默认使用8080端口&#xff0c;8080端口也用于www代理服务&#xff0c;阿腾云atengyun.com以8080端口为例来详细说下阿里云服务器8080端口开启教程教程&#xff1a; 阿里云服务器8080端口开启教程 阿里云服务器8080端…

Mac 安装 Adobe AE/PS 软件报错 “Failed with error code 146“

文章目录 1. 安装 AE 软件报错2. 网上的方法2.1 删除 caps 文件夹2.2 删除 Adobe Sync 文件夹 3. 我的解决方法 1. 安装 AE 软件报错 我在尝试安装 Adobe AE 软件的时候&#xff0c;报错 “Failed with error code 146” 2. 网上的方法 2.1 删除 caps 文件夹 在 finder 的…

众和策略股市行情分析:股票分红是按持股比例来分的吗?

股票分红立足于同股同利的准则&#xff0c;按股东的持股比例来进行股利的派发分红。持股多的股东按比例所得的分红就多&#xff0c;持股少的股东按比例所得的分红就少。 另外&#xff0c;分红详细是指的股票发行公司分配股利的行为。股利包含股息和盈利&#xff0c;股息是指的…

【Web】CTFSHOW元旦水友赛部分wp

目录 ①easy_include ②easy_web ③easy_login web一共5题&#xff0c;我出了3题&#xff0c;巧的是好像师傅们也只出了3题&#xff0c;跨年拿旗还是很快乐的&#xff0c;下面直接贴出自己的wp. ①easy_include pearcmd不解释 这里主要是 &#xff0c;file://协议支持以fi…

Java中的序列化方法探索

.为什么要序列化 对象不序列化&#xff0c;能直接存储吗&#xff1f; 在 Java 中&#xff0c;序列化是将对象的状态信息转换为可以存储或传输的形式&#xff08;例如&#xff0c;转换为字节流&#xff09;的过程。在对象数据需要在网络上传输或需要在磁盘上持久化存储时&#…

Spring Boot学习随笔- 集成MyBatis-Plus(二)条件查询QueryWrapper、聚合函数的使用、Lambda条件查询

学习视频&#xff1a;【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 查询方法详解 普通查询 // 根据主键id去查询单个结果的。 Test public void selectById() {User user userMapper.selectById(1739970502337392641L);System.out.print…