如何在 Odoo 17 中为自定义模块添加设置菜单

Odoo 是一款极具影响力的开源企业资源规划和业务管理软件,用户可利用自定义模块灵活定制和增强其功能。在定制模块开发中,一个重要的方面是纳入设置菜单,使用户能够根据自己的独特需求对多个选项进行微调。

本文将引导您逐步了解如何在 Odoo 17 中为自定义模块无缝集成设置菜单。这样,用户就可以毫不费力地个性化模块设置。

要启动这一过程,第一步是创建一个自定义模块。这需要定义一个配置模型,负责存放模块的特定设置。该模型继承自 Odoo 提供的基础组件 "res.config.settings "类。打开模块的主 Python 文件并加入以下代码。

class ResConfigSettings(models.TransientModel):
   _inherit = 'res.config.settings'
  
   contract_type = fields.Selection(
       [('monthly', 'Monthly'), ('half_yearly', '6 Months'),
        ('yearly', 'Yearly')],
       string="Contract Type",
       config_parameter='employee_contract.contract_type',
       help="Select contract types from the selection field")

所提供的代码在 "res.config.settings "模型中引入了一个新字段,用于选择员工合同类型。该字段使用了 "config_parameter "属性,该属性利用了可在整个 Odoo 系统中访问的全局模型。该功能便于在数据库中存储和检索配置参数。为确保所选数据得到适当保存,"config_parameter "属性在字段声明中不可或缺。保存记录后,字段中数据的存在或添加情况就会清晰明了。在这种情况下,"employee_contract.contract_type "字段的 "config_parameter "属性就建立起来了,其中 "employee_contract "表示模块名称,"contract_type "表示声明中的字段名称。

继承 "res.config.settings "后,下一步就是为我们的新模块创建视图。为此,请加入以下 XML 代码。

<record id="res_config_settings_view_form" model="ir.ui.view">
   <field name="name">
       res.config.settings.view.form.inherit.employee.contract
   </field>
   <field name="model">res.config.settings</field>
   <field name="priority" eval="15"/>
   <field name="inherit_id" ref="base.res_config_settings_view_form"/>
   <field name="arch" type="xml">
       <xpath expr="//form" position="inside">
           <app data-string="Employee Management" string="Employee Management" name="employee_contract">
               <block title="Employee Management Settings" name="employee_management">
                   <setting string="Contract Type"
                            help="Select the Contract Type"
                            id="contract_type_setting">
                       <field name="contract_type"/>
                       <div class="content-group"
                            invisible="not contract_type"
                            id="group_contract_type_setting">
                           <div class="text-warning mt16">
                               <strong>Save</strong>
                               this page and come back here to set up the
                               feature.
                           </div>
                       </div>
                   </setting>
               </block>
           </app>
       </xpath>
   </field>
</record>

所提供的 XML 代码在 Odoo 框架中为 "res.config.settings "模型定义了一个视图表单,扩展了 ID 为 "base.res_config_settings_view_form "的基本视图。自定义视图引入了 "员工管理 "部分,封装在应用程序和块结构中。在该部分中,定义了 "合同类型 "设置,包括一个用于选择合同类型的字段。XML 代码还包含一条警告信息,根据合同类型的存在有条件地显示,建议用户保存页面并返回进行进一步的功能设置。

随后,加入 "ir.actions.act.window "模型,该模型封装了一个窗口操作,概述了相关菜单项的行为。

<record id="res_config_settings_action" model="ir.actions.act_window">
   <field name="name">Configuration</field>
   <field name="type">ir.actions.act_window</field>
   <field name="res_model">res.config.settings</field>
   <field name="view_mode">form</field>
   <field name="target">inline</field>
   <field name="context">{'module' : 'employee_contract'}</field>
</record>
<menuitem id="employee_management_menu_root"
         name="Employee Management"
         sequence="1"/>
<menuitem id="employee_management_menu_action"
         name="Configuration"
         parent="employee_contract.employee_management_menu_root"
         sequence="6"/>
<menuitem id="employee_contract_settings_menu_action"
         name="Settings"
         parent="employee_contract.employee_management_menu_action"
         action="res_config_settings_action"
         sequence="7"/>

上述代码在 Odoo 中为 "res.config.settings "模型建立了操作和菜单项。具体来说,"res_config_settings_action "记录定义了一个名为 "配置 "的窗口操作,其属性包括关联模型、视图模式设置为 "表单 "以及指定上下文。该操作封装了与配置 "员工管理 "设置相关的菜单项的行为。

随后的菜单项构成了应用程序菜单的层次结构。"员工管理 "是根菜单项,其下嵌套着 "配置 "菜单项。此外,"设置 "菜单项与 "res_config_settings_action "操作相关,位于 "配置 "菜单项之下。

按照这些步骤,您就可以执行代码,并观察到字段值在用户界面屏幕上显示为带有预定义选项的选择字段。 

how-to-add-a-settings-menu-for-custom-modules-in-odoo-17-1-cybrosys

在 Odoo 模块中配置所提供的代码是一个简单的过程,需要定义适当的 XML 和 Python 代码。通过这些步骤,您可以显著增强 Odoo 模块的功能和用户体验,为用户提供专门的设置菜单来配置模块的特定选项。这种定制不仅能使模块满足独特的要求,还能改进用户界面,使其更加直观。 

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

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

相关文章

Android Launcher开发注意事项

在开发Android Launcher时&#xff0c;需要关注性能、用户体验、权限管理、兼容性等方面&#xff0c;同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

『Mysql』Mysql四种分区方式及组合分区落地实现

&#x1f4e3;读完这篇文章里你能收获到 Mysql分区的概念Mysql分区四种分区方式的落地及案例Mysql分区的管理 文章目录 一、概念篇 1 分区是什么2 Mysql中分区原理3 Mysql中分区局限二、落地篇 1 Range分区2 Hash分区3 Key分区4 List分区5 组合分区三、Mysql如何管理分区 1 删…

【LAMMPS学习】三、构建LAMMPS(5)可选的构建设置

3、构建LAMMPS 3.5.可选的构建设置 LAMMPS 可以通过多种可选设置来构建。每个小节都解释了如何使用 CMake 和 make 进行构建。 3.5.1. C11 标准合规性 编译 LAMMPS 需要 C11 标准兼容编译器。 LAMMPS 2020 年 3 月 3 版是核心代码和大多数软件包与之前的 C98 标准兼容的最…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

oracle设置主键自增步骤

设置主键自增步骤&#xff1a; 每一张表都要设置序列&#xff0c;然后设置触发器。比mysql繁琐。 一、设置序列 选中表后&#xff0c;—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字&#xff0c;一定要全大写字母。 二、设置触发器…

摘录笔记——2024年3月20日

这位大佬介绍的技术PM方面心得&#xff0c;有一定的启发意义&#xff08;虽说我现在只是搬砖的&#xff0c;跟PM还有一定差距&#xff09;&#xff0c;现在摘录出来作为记录&#xff1a; 一文聊聊我理解的技术PM作为技术同学&#xff0c;不仅要写好自己的代码&#xff0c;做好…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…

Halcon 路标牌识别

文章目录 gray_closing_shape 使用选定的掩码执行灰度值关闭create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型get_deformable_model_params 返回可变形模型的参数find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳…

详细剖析多线程(更新中...)

文章目录 前言一、认识线程1.1线程概念1.2为什么要有线程1.3线程和进程的区别&#xff08;经典面试题&#xff09; 二、创建线程2.1继承 Thread 类,重写run2.2实现 Runnable 接口,重写run2.3继承 Thread 类,重写run&#xff0c;匿名内部类2.4实现 Runnable 接口,重写run&#x…

电脑维修的相关资料,有需要的自取

电脑维修的相关资料&#xff0c;有需要的自取。 链接&#xff1a;https://pan.baidu.com/s/1X81sBNAOmomFvug6mK56Bw 提取码&#xff1a;52pj 爆笑幽默段子&#xff1a;电脑出故障了&#xff0c;准备拿去修&#xff0c;结果被女朋 友拦住了。女朋友&#xff1a;“你们男人一定…

登录与注册功能(简单版)(3)登录时使用Cookie增加记住我功能

目录 1、实现分析 2、步骤 1&#xff09;新建login.jsp 2&#xff09;修改LoginServlet&#xff1a; 3&#xff09;启动访问&#xff1a; 3、安全性考虑 4、最佳实践思路 1&#xff09;选择安全的认证机制 2&#xff09;强化会话管理 3&#xff09;安全地存储用户凭证…

数字化战略失配企业现状,可惜了!

尽管大部分的企业领导者已经意识到数字化转型对于企业革新业务模式、提升运营效率、抢占市场先机的关键作用&#xff0c;但是&#xff0c;认知上的转变并不等同于成功的实践。在实际操作中&#xff0c;往往出现战略与企业现状不符的现象&#xff0c;这无疑会使得所有的努力付诸…

矩形总面积(第十四届蓝桥杯JavaB组省赛真题)

测试用例范围比较大&#xff0c;所以全部用long类型&#xff0c;如果用int类型只能通过60%&#xff0c;建议在内存和运行时间允许的情况下&#xff0c;比赛题都用long。 重点在于计算相交的面积&#xff0c;这里找的两个相交点是左上角&#xff08;m1,n1&#xff09;和右下角&a…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

万亿参数GPU!算力提升30倍!英伟达新核弹B200重磅发布!

关注文章底部的公众号,获取每日AI资讯 前沿 3月18日-21日期间,英伟达在美国圣何塞召开GTC大会。创始人黄仁勋也在GTC大会上,做了一场长达两小时的开幕演讲,展示了其在AI芯片、机器人、汽车等领域的最新研发成果和技术进展,号称让全世界用上AI。 全球头号人工智能领域开发…

加解密、签名、验签、数字签名、数字证书

说明&#xff1a;本文属于学习笔记&#xff0c;借鉴了很多经典网文&#xff0c;已记不清出处&#xff0c;如有侵权&#xff0c;请告知。 前言&#xff1a; 嵌入式开发时&#xff0c;绕不开数据安全问题。最近又在做OTA升级相关工作&#xff0c;因此&#xff0c;借此机会学习了加…

MySQL 索引:索引为什么使用 B+树?

Hash 索引不支持顺序和范围查询&#xff1b; 二叉查找树(BST)&#xff1a;解决了排序的问题&#xff0c;极端情况下可能会退化成线性链表&#xff0c;查询效率急剧下降&#xff1b; 平衡二叉树(AVL) &#xff1a;通过旋转解决了平衡的问题&#xff0c;但是旋转操作效率太低&am…

从点云创建 DSM:网格化和可视化实用指南

今天我将向您展示如何从点云创建数字表面模型&#xff08;DSM&#xff09;。首先&#xff0c;我们将尝试了解 DSM 是什么&#xff0c;然后我们将进入讨论的更实际部分。 什么是 DSM&#xff1f; DSM 是一个描述表面及其表面所有内容的模型。现在&#xff0c;为了更清楚地了解…

分布式异步任务框架celery

Celery介绍 github地址&#xff1a;GitHub - celery/celery: Distributed Task Queue (development branch) 文档地址&#xff1a;Celery - Distributed Task Queue — Celery 5.3.6 documentation 1.1 Celery是什么 celery时一个灵活且可靠的处理大量消息的分布式系统&…

hcip复习总结1

OSI----------- 定义了数据的产生标准 。 7 层 应用 ------- 表示 会话 传输 -----Telnet - 23 ssh---22 http---80 https-443 TCP ---- 传输控制卋议。是一种面向连接的可靠的传输卋议。 UDP---- 用户数据报卋议。是一种非面向连接的丌可靠传输卋议。 保证可靠性&…