odoo17 4模型视图理解

XML 代码结构概览

这段 XML 代码定义了 my_hostel 模块中 hostel.hostel 模型的两个视图:列表视图 (tree view) 和表单视图 (form view),以及一个动作 (action) 和两个菜单项 (menuitem)。

整体框架

<odoo>
    <data>
        <!--  这里放各种记录的定义  -->
    </data>
</odoo>
  • <odoo>: XML 文件的根元素,表示这是一个 Odoo 的 XML 配置文件。
  • <data>: 包含所有 Odoo 记录 (records) 的容器。 这些记录通常是视图,动作,菜单项等。

记录 (record) 的定义

<data> 标签内部,我们使用 <record> 标签来定义不同的记录。 每个记录都对应 Odoo 系统中的一条数据。

1. 列表视图 (Tree View) 的定义

<record id="view_hostel_tree" model="ir.ui.view">
    <field name="name">hostel.hostel.tree</field>
    <field name="model">hostel.hostel</field>
    <field name="arch" type="xml">
        <tree string="Hostel">
            <field name="name"/>
            <field name="hostel_code"/>
            <field name="mobile"/>
        </tree>
    </field>
</record>
  • <record id="view_hostel_tree" model="ir.ui.view">
    • record: 定义一条记录。
    • id="view_hostel_tree": 当前记录的唯一标识符 (External ID)。 你应该为每一个 <record> 标签都定义一个 id 值,方便在 Odoo 系统中引用。
    • model="ir.ui.view": 表示当前记录的类型是 ir.ui.view,这是 Odoo 中用于存储视图配置的系统模型。
  • <field name="name">hostel.hostel.tree</field>:
    • 定义视图的名称,用于在 Odoo 内部识别该视图。
  • <field name="model">hostel.hostel</field>:
    * 指定该视图所针对的模型为 hostel.hostel 模型。
  • <field name="arch" type="xml">:
    • arch 表示 “architecture”, 定义视图的结构。
    • type="xml" 表示视图结构是用 XML 定义的。
  • <tree string="Hostel">:
    • 表示这是一个列表视图,string="Hostel" 指定了列表视图在 UI 中显示的标题。 你可以使用其他的字符串来替换。
  • <field name="name"/>, <field name="hostel_code"/>, <field name="mobile"/>:
    • 在列表视图中显示的字段。
    • name 属性指定了模型中对应的字段。
    • 这些字段将以列的形式展示。

总结:

  • 这个 record 定义了一个列表视图,用于显示 hostel.hostel 模型的数据。
  • 列表视图将显示 namehostel_codemobile 这三个字段。

2. 表单视图 (Form View) 的定义

<record id="view_hostel_form" model="ir.ui.view">
    <field name="name">hostel.hostel.form</field>
    <field name="model">hostel.hostel</field>
    <field name="arch" type="xml">
        <form string="Hostel">
            <sheet>
                <div class="oe_title">
                    <h3>
                        <table>
                            <tr>
                                <td style="padding-right:10px;"><field name="name" required="1" 
                                placeholder="Name" /></td>
                                <td style="padding-right:10px;"><field name="hostel_code" 
                                placeholder="Code" /></td>
                            </tr>
                        </table>
                    </h3>
                </div>
                <group>
                    <group>
                        <label for="street" string="Address"/>
                        <div class="o_address_format">
                            <field name="street" placeholder="Street..." class="o_address_street"/>
                            <field name="street2" placeholder="Street 2..." class="o_address_street"/>
                            <field name="city" placeholder="City" class="o_address_city"/>
                            <field name="state_id" class="o_address_state" placeholder="State" 
                            options='{"no_open": True}'/>
                            <field name="zip" placeholder="ZIP" class="o_address_zip"/>
                            <field name="country_id" placeholder="Country" 
                            class="o_address_country" options='{"no_open": True, "no_create": True}'/>
                        </div>
                    </group>
                    <group>
                        <field name="phone" widget="phone"/>
                        <field name="mobile" widget="phone"/>
                        <field name="email" widget="email" context="{'gravatar_image': True}"/>
                    </group>
                </group>
            </sheet>
        </form>
    </field>
</record>
  • <record id="view_hostel_form" model="ir.ui.view">: 类似列表视图,定义了一个类型为 ir.ui.view 的记录, idview_hostel_form
  • <field name="name">hostel.hostel.form</field><field name="model">hostel.hostel</field>
    • 定义了视图的名称和所针对的模型,与列表视图类似。
  • <field name="arch" type="xml">:
    • 同样表示视图的结构。
  • <form string="Hostel">:
    • 表示这是一个表单视图,string="Hostel" 指定表单视图的标题。
  • <sheet>:
    • 表示表单视图的主要内容区域,用于包含表单的字段和布局。
  • <div class="oe_title">
    • 一个 div 元素,使用 oe_title CSS 类,通常用于设置表单的主要标题区域。
  • <table>, <tr>, <td>: 使用 HTML 表格来布局标题。
  • <h3>
  • 使用 h3 标签来显示标题。
  • <field name="name" required="1" placeholder="Name" /><field name="hostel_code" placeholder="Code" />:
    • 定义表单中要显示的字段。
    • name 属性指定要显示的字段名。
    • required="1" 表示该字段是必填的。
    • placeholder="Name" 表示输入框中的占位符文本。
  • <group>:
    • 用于将字段分组,从而在表单中进行分栏布局。
  • <label for="street" string="Address"/>
  • label 标签,用于显示标签文本。
    * for="street" 将标签和 street 字段关联。
    * string="Address" 定义了标签的文本。
  • <div class="o_address_format">:
    • 一个 div 元素,使用 o_address_format CSS 类,通常用于显示地址格式的字段。
  • <field name="street" .../>, <field name="street2" .../>, <field name="city" .../>, field name="state_id" .../>, <field name="zip" .../>, <field name="country_id" .../>
    • 定义了地址相关的字段,使用 class 属性来指定 CSS 类,以实现特定的样式。
    • class="o_address_street"class="o_address_city", class="o_address_state", class="o_address_zip"class="o_address_country" 表示使用 Odoo 的地址样式。
    • options='{"no_open": True}' 表示在选择时,不打开相关记录的表单视图,使用弹出选择框。
    • options='{"no_open": True, "no_create": True}' 表示禁止创建记录。
  • <field name="phone" widget="phone"/>, <field name="mobile" widget="phone"/>, <field name="email" widget="email" context="{'gravatar_image': True}"/>
    • 这些字段使用 widget 属性指定了 Odoo 的特定 UI 小部件。
    • widget="phone": 将字段显示为电话号码输入框。
    • widget="email": 将字段显示为邮箱地址输入框,并且通过 context="{'gravatar_image': True}" 支持显示头像。

总结:

  • 这个 record 定义了一个表单视图,用于创建和编辑 hostel.hostel 模型的数据。
  • 表单视图的布局使用 sheet 来包含内容。
  • 使用 group 来实现分栏布局。
  • 使用 field 标签显示模型中的字段,以及配置 requiredplaceholderwidget 等属性。
  • 通过classoptions等属性,可以实现 Odoo 特定的样式和功能。

3. 动作 (Action) 的定义

<record model="ir.actions.act_window" id="action_hostel">
    <field name="name">Hostel</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">hostel.hostel</field>
    <field name="view_mode">tree,form</field>
    <field name="help" type="html">
        <p class="oe_view_nocontent_create">
            Create Hostel.
        </p>
    </field>
</record>
  • <record model="ir.actions.act_window" id="action_hostel">:
    • 定义一个类型为 ir.actions.act_window 的记录, idaction_hostel
    • ir.actions.act_window 是 Odoo 中用于创建动作的系统模型。
  • <field name="name">Hostel</field>
    • 定义了动作的名称,用于在 Odoo 中显示。
  • <field name="type">ir.actions.act_window</field>:
    * 指定了动作的类型是 ir.actions.act_window (一个打开窗口的动作)。
  • <field name="res_model">hostel.hostel</field>
    • 定义了动作对应的模型为 hostel.hostel 模型。
  • <field name="view_mode">tree,form</field>:
    • 指定该动作可以使用的视图模式:列表视图 (tree) 和表单视图 (form)。
  • <field name="help" type="html">
    * help 属性定义了动作的帮助文本, type="html" 表示帮助文本以 HTML 格式定义。
    • <p class="oe_view_nocontent_create"> Create Hostel.</p> 定义了当列表中没有记录时,显示的提示文字。

总结:

  • 这个 record 定义了一个动作,用于打开一个窗口来管理 hostel.hostel 模型的数据。
  • 该动作支持列表视图和表单视图。
  • 提供了帮助文本。

4. 菜单项 (Menuitem) 的定义

<menuitem id="hostel_main_menu" name="Hostel" sequence="1"/>

<menuitem id="hostel_type_menu" name="Hostel" parent="hostel_main_menu" 
    action="my_hostel.action_hostel" groups="my_hostel.group_hostel_manager" 
    sequence="1"/>
  • <menuitem id="hostel_main_menu" name="Hostel" sequence="1"/>:
    • id="hostel_main_menu" 定义了菜单项的唯一标识符。
    • name="Hostel" 定义菜单项显示的名称。
    • sequence="1" 定义了菜单项在同级菜单中的顺序。
  • <menuitem id="hostel_type_menu" name="Hostel" parent="hostel_main_menu" action="my_hostel.action_hostel" groups="my_hostel.group_hostel_manager" sequence="1"/>:
    • id="hostel_type_menu" 定义了菜单项的唯一标识符。
    • name="Hostel" 定义菜单项显示的名称。
    • parent="hostel_main_menu" 定义了父菜单,表示此菜单项是 hostel_main_menu 的子菜单项。
    • action="my_hostel.action_hostel" 将此菜单项与之前定义的 action_hostel 动作关联。
    • groups="my_hostel.group_hostel_manager" 表示只有属于 my_hostel.group_hostel_manager 用户组的用户才能看到此菜单项。
    • sequence="1" 定义了菜单项在同级菜单中的顺序。

总结:

  • hostel_main_menu 定义一个主菜单,用于在 Odoo 菜单中显示。
  • hostel_type_menu 定义一个子菜单,并且该子菜单只有属于 my_hostel.group_hostel_manager 用户组的用户才能看到,点击该菜单将打开 action_hostel 动作。

需要记住的规范和可以理解的

  • 需要记住的规范:
    • XML 结构<odoo>, <data>, <record>, <field> 等 XML 标签及其嵌套关系。
    • Odoo 模型的定义: ir.ui.view, ir.actions.act_window, 和 menuitem 等。
    • 外部标识符: <module_name>.<unique_name> 的格式,用于唯一标识记录。
    • id 属性的定义,每个 record 都需要一个唯一的 id
    • model 属性,指定 record 的类型,比如 ir.ui.view
    • 视图使用 arch 来描述视图的结构, 并且定义 type="xml"
    • namestringmodelres_model 等属性在不同场景下的含义。
    • widgetcontext 等属性的使用。
    • 各种 UI 组件 ( div , table, tr, td, h1,h3,label, field, group)的用法。
    • 菜单项的idnameparentactiongroupssequence 的用法。
  • 可以理解的:
    • 视图的布局:你可以根据自己的需求调整表单视图的字段布局,可以使用 group 来实现分栏,也可以使用 div, table 等标签来组织内容。
    • 字段的属性:你可以根据需求设置字段的 requiredplaceholderwidget 等属性。
    • 菜单项的名称:你可以自定义菜单项的 namesequence 属性。
    • 视图的 string 属性: 你可以自定义视图的标题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 性能监控工具之命令行篇

在 Java 开发过程中&#xff0c;性能监控和问题排查是开发者经常面临的任务。JDK 提供了一系列命令行工具&#xff0c;帮助开发者监控 JVM 运行状态、诊断内存泄漏、线程死锁等问题。本文将详细介绍这些工具的使用方法及其应用场景。 1 JDK性能监控工具 1.1 jps&#xff1a;查…

使用IDEA远程debug服务器上的jar包

仅用于测试环境调试&#xff0c;debug会阻塞 如生产jar包叫 test.jar &#xff0c;部署的IP为10.184.136.18&#xff0c;端口为9999&#xff0c;idea的项目为local-network&#xff0c;照如下配置即可&#xff0c;仅红色部分需替换 弄完之后&#xff0c;打开debug&#xff0c;…

【SQL Server】教材数据库(3)

接着教材数据库&#xff08;1&#xff09;的内容&#xff0c;完成下列查询。 1 查询订购高等教育出版社教材的学生姓名 2 查询比所有高等教育出版社的图书都贵的图书信息 3 列出每位学生姓名、订购教材书名、价格。 1、嵌套查询&#xff1a;use jiaocai select student.nam…

你有哪些Deep Learning(RNN、CNN)调参的经验?

在深度学习的实践中&#xff0c;调参是一项既艺术又科学的工作。它不仅需要理论知识的支撑&#xff0c;还需要大量的实践经验。以下是一些在RNN和CNN模型调参中积累的经验&#xff0c;希望对正在这个领域摸索的朋友们有所帮助。 1. 从成熟的开源项目开始 对于初学者来说&…

Unity3D仿星露谷物语开发11之添加Scenary Fader

1、目标 当角色移动到草/树的后面时&#xff0c;因为草/树层级优先级大于等于角色&#xff0c;导致角色无法全部展示。 如下图所示&#xff0c;草遮挡了一半的角色&#xff0c;而树则遮挡了全部的角色。 我们希望当角色走到草/树的后面时&#xff0c;草/树能够改变透明度&…

021-spring-springmvc

比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是&#xff1a; org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc.method.annotation.Requ…

关于 PCB线路板细节锣槽问题 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144783817 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

无人机快速巡检、森林、电力、水利大大节省人力成本,降低风险事故

无人机在快速巡检、森林、电力、水利等领域的应用&#xff0c;确实大大节省了人力成本&#xff0c;并有效降低了风险事故。以下是对这些应用的详细分析&#xff1a; 一、无人机快速巡检 无人机快速巡检技术以其高效性、安全性和精准性&#xff0c;在众多领域展现出了巨大的应…

生态碳汇涡度相关监测与通量数据分析实践技术应用

基于MATLAB语言、以实践案例为主&#xff0c;提供所有代码、原理与操作结合 1、以涡度通量塔的高频观测数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 2、涡度通量观测基本概况&#xff1a;观测技术方法、数据获取与预处理等 3、涡度通量数据质量控制&#xff1a…

【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】

系列文章目录 文章目录 前言一、概述1.1 Lua堆栈 二、栈操作2.1 基本的栈操作2.2 入栈操作函数2.3 出栈操作函数2.4 既入栈又出栈的操作函数2.5 栈检查与类型转换函数2.5 获取表数据 三、实例演示总结 前言 Lua是一种轻量级的、高性能的脚本语言&#xff0c;经常被用于游戏开发…

安装OpenGauss数据库流程

一、安装完欧拉系统将yum上传至本地&#xff1a; 创建文件 mkdir /media/iso 挂载镜像 mount /dev/sr0 /media/iso 未通网情况&#xff0c;删除自带的yum&#xff0c;创建一个新的 cd /etc/yum.repos.d/ rm -r 加yum文件名称 &#xff08;删除自带yum&#xff09; v…

Go语言zero项目服务恢复与迁移文档

## 一. 服务器环境配置 在迁移和配置 项目时&#xff0c;首先需要确保服务器环境正确配置。以下是配置步骤&#xff1a; ### 1. 安装 Go 语言环境 首先&#xff0c;确保 Go 语言环境已经安装&#xff0c;并且配置正确。执行以下步骤&#xff1a; # 下载 Go 语言安装包 wge…

【 Sonarqube】可视化Java项目单元测试覆盖率统计框架搭建

一、项目背景&#xff1a; 一个小公司的朋友反应他们那边Java项目单元测试有&#xff0c;但还没有可视化统计覆盖率数据&#xff0c;没法统计就不能直观的看到单测的覆盖率&#xff0c;Java的覆盖率统计框架还是比较成熟&#xff0c;部署起来也不是很难&#xff0c;下面我们逐…

使用ForceBindIP绑定应用到指定IP

前言 使用ForceBindIP工具&#xff0c;用户可以轻松地将特定应用程序绑定到指定的IP地址&#xff0c;从而确保应用程序的网络连接通过指定的网络适配器进行。通过在命令提示符下运行ForceBindIP并指定IP地址和应用程序的完整路径&#xff0c;用户能够控制应用程序的网络流量&a…

Webpack学习笔记(6)

首先搭建一个基本的webpack环境&#xff1a; 执行npm init -y&#xff0c;创建pack.json&#xff0c;保存安装包的一些信息 执行npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D&#xff0c;出现node_modules和package-lock.json。 1.source-Ma…

【学生管理系统】element ui级联菜单bug

级联后端 通过父id来进行查询 GetMapping("/{parentId}")public BaseResult findAllByParentId(PathVariable("parentId") String parentId){//1 根据父id查询所有城市QueryWrapper<TbCity> queryWrapper new QueryWrapper<>();queryWrapper.…

关于无线AP信道调整的优化(锐捷)

目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰&#xff0c;提高网络覆盖范围和信号质量。基本原则包括&#xff1a; 1. 选择合适的信道&#xff1a;根据…

Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程

Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程 作者&#xff1a;Witheart更新时间&#xff1a;20241228 本教程将详细介绍如何将 U 盘格式化为 ext4、FAT32 和 exFAT 文件系统&#xff0c;同时包括如何安装必要工具&#xff08;如 exfat-utils&#x…

【设计与实现】基于Bootstrap的地方旅游管理系统的设计与实现

目录 第一章 绪论 1.1 研究现状 1.2 设计原则 1.3 研究内容 第四章 系统设计 4.1系统结构设计 4.2系统顺序图设计 4.3数据库设计 第五章 系统实现 5.1登录模块的实现 第一章 绪论 1.1 研究现状 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐…

【MySQL高级】索引

MySQL高级课程简介 序号010203041基本硬件知识体系结构应用优化MySQL 常用工具2索引存储引擎查询缓存优化MySQL 日志3视图优化SQL步骤内存管理及优化MySQL 主从复制4存储过程和函数索引使用MySQL锁问题5触发器SQL优化常用SQL技巧 1. 基本硬件知识 1.1 计算机工作原理 1.中央处…