odoo17 | 创建一个新应用程序

前言

本章的目的是为创建一个全新的Odoo模块奠定基础。 我们将从头开始,以使我们的模块被Odoo识别所需的最低限度。 在接下来的章节中,我们将逐步添加功能以构建一个真实的业务案例。

教程

假设我门需要在odoo上开发一个新app模块例如房地产广告模块。本节的目标是让Odoo识别我们的新模块,这将暂时是一个空壳。它将在应用程序中列出。
在这里插入图片描述

  • 首先需要在项目的根目录下新建一个custom_addons(名字可以更具自己的喜好命令)文件夹,用来存放我们接下开发的一些模块代码。odoo系统自带的模块代码都在根目录的addons文件夹下。虽然我们也可以把新开发的模块代码放在addons文件夹下,当时为了区分自己开发的和系统自带的模块我们最好还是新建一个文件夹来存放我们自己开发的模块。
  • 接下来修改odoo.config配置文件中的addons_path参数为 addons_path = addons,custom_addons
  • 然后在custom_addons文件夹下创建一个estate模块文件夹,以后用来放房地产广告模块的代码。
  • 一个模块必须至少包含 2 个文件:__manifest__.py(清单文件)和 __init__.py。 __init__.py文件现在可以保持为空,我们将在下一章中回到它。另一方面,__manifest__.py文件必须描述我们的模块,并且不能保持空。它唯一必需的字段是名称,但它通常包含更多信息。

__manifest__.py(清单)

清单文件用于将 python 包声明为 Odoo 模块 并指定模块元数据。

它是一个名为并包含单个 Python 的文件 字典,其中每个键指定模块元。manifest.py

{'name': "Real Estate",'version': '1.0','depends': ['base'],'author': "Author Name",'category': 'Category','description': """房地产广告模块""",# data files always loaded at installation'data': [#'views/mymodule_view.xml',],# data files containing optionally loaded demonstration data'demo': [#'demo/demo_data.xml',],
}

该文件应该只定义模块的名称和依赖项。 目前唯一需要的框架模块是 .manifest.py base。

可用的清单字段包括:

name (str,必填)
模块的人类可读名称

version (str)
此模块的版本应遵循语义版本控制规则

description (str)
模块的扩展说明,在 reStructuredText 中

author (str)
模块作者的姓名

website (str)
模块作者的网站 URL

license (str, defaults: LGPL-3)
模块的分发许可证。 可能的值:

  • GPL-2
  • GPL-2 or any later version
  • GPL-3
  • GPL-3 or any later version
  • AGPL-3
  • LGPL-3
  • Other OSI approved licence
  • OEEL-1(Odoo企业版许可证v1.0)
  • OPL-1(Odoo 专有许可证 v1.0)
  • Other proprietary

category (str, default: Uncategorized)
Odoo中的分类类别,模块的粗略业务领域。

尽管建议使用现有类别,但该字段是 自由格式和未知类别是即时创建的。类别 可以使用分隔符创建层次结构,例如 将创建一个类别,一个类别作为子类别,并将设置为模块的类别。/Foo / BarFooBarFooBar

depends (list(str))
Odoo模块必须在此之前加载,因为 模块使用他们创建的功能,或者因为它改变了他们 定义。

安装模块时,其所有依赖项都将在安装之前安装 它。同样,依赖项在加载模块之前加载。

注意
模块base 总是安装在任何Odoo实例中。但是,您仍然需要将其指定为依赖项,以确保在base更新时更新模块。

data (list(str))
必须始终使用 模块。模块根目录中的路径列表

demo (list(str))
仅在演示中安装或更新的数据文件列表 模式

auto_install (bool or list(str), default: False)
如果 ,此模块将自动安装,如果其所有 已安装依赖项。True

一般用于实现协同集成的“链接模块” 在两个其他独立的模块之间。

例如,依赖于 和 和 被设置 自。当两者都安装时,它 自动将CRM活动跟踪添加到销售订单中,而无需相互了解。sale_crmsalecrmauto_installsalecrmsalecrm

如果它是一个列表,它必须包含依赖项的子集。该模块将自动 一旦安装了子集中的所有依赖项,就会安装。其余的 依赖项也将自动安装。如果列表为空,则此模块将 无论其依赖项如何,始终自动安装,这些将作为 井。

external_dependencies (dict(key=list(str)))
包含 python 和/或二进制依赖项的字典。

对于 python 依赖项,必须为此定义密钥 应分配字典和要导入的 Python 模块列表 到它。python

对于二进制依赖项,必须为此定义密钥 应为其分配字典和二进制可执行文件名称列表。bin

如果未安装 python 模块,则不会安装该模块 或在主机中找不到二进制可执行文件 主机的 PATH 环境变量。

application (bool, default: False)
是否应将该模块视为一个成熟的应用程序 () 或者只是一个技术模块 (),它提供了一些 现有应用程序模块的额外功能。TrueFalse

assets (dict)
定义如何在各种资产包中加载所有静态文件。 有关如何操作的更多详细信息,请参阅资产页面 描述捆绑包。

installable (bool default: True)
用户是否应该能够从 Web UI 安装模块。

maintainer (str)
默认情况下,负责维护此模块的个人或实体 假设作者是维护者。

{pre_init, post_init, uninstall}_hook (str)
用于模块安装/卸载的钩子,其值应为 字符串表示在模块的 .init.py

-pre_init_hook将游标作为其唯一参数,此函数是 在模块安装之前执行。

-post_init_hook将游标和注册表作为其参数,这 函数在模块安装后立即执行。

-uninstall_hook将游标和注册表作为其参数,这 函数在模块卸载后执行。

仅当此模块需要设置/清理时,才应使用这些挂钩 通过 API 要么非常困难,要么是不可能的。

active (bool)
弃用。由auto_install取代。

重新启动Odoo

重新启动Odoo服务器并转到应用程序。 单击“更新应用程序列表”,
在这里插入图片描述
搜索estate模块,estate房地产广告模块出现了!如果它没有出现吗?也许尝试删除默认的“应用程序”过滤器。
在这里插入图片描述

  • **警告:**请记住启用开发人员模式,否则,您将不会看到“更新应用列表”按钮。

如果你想要将estate房地产模块变成一个应用程序app,只需要修改__manifest__.py清单文件中添加以下配置,重启服务后,再次点击更新应用程序列表即可。

'application': True,

使您的模块成为“应用程序”。

您甚至可以安装启用该模块!但显然它是一个空壳,所以不会出现菜单。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的面向对象学习(9):文件操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、类的封装的多文件实现回顾二、文件操作1.对文件进行操作需要头文件<fstream>2.操作文件的三大类方法&#xff1a;读、写、读写 三、实现文本文件的读、写…

提取 PE 文件的各种信息

前段时间项目需要实现对 Windows PE 文件版本信息的提取&#xff0c;如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用&#xff0c;简单方便。 我们先看一下PE文件结构&#xff0c;PE文件由DOS首部&#xff0…

数据结构期末复习(3)栈和队列

堆栈&#xff08;stack&#xff09; 堆栈&#xff08;stack&#xff09;是一种基于后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;原则的数据结构。它模拟了现实生活中的堆栈&#xff0c;类似于一摞盘子或一堆书。 堆栈有两个基本操作&#xff1a;入栈&a…

【代码解析】代码解析之生成token(1)

本篇文章主要解析上一篇&#xff1a;代码解析之登录&#xff08;1&#xff09;里的第8行代码调用 TokenUtils 类里的genToken 方法 https://blog.csdn.net/m0_67930426/article/details/135327553?spm1001.2014.3001.5501 genToken方法代码如下&#xff1a; public static S…

【UE 截图】 自定义截图路径 文件名

目录 0 引言1 实践 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 截图】 自定义截图路径 文件名❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01;&#x1f388; 最…

LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

LanceDB 建立在 Lance&#xff08;一种开源列式数据格式&#xff09;之上&#xff0c;具有一些有趣的功能&#xff0c;使其对 AI/ML 具有吸引力。例如&#xff0c;LanceDB 支持显式和隐式矢量化&#xff0c;能够处理各种数据类型。LanceDB 与 PyTorch 和 TensorFlow 等领先的 M…

漏洞复现-海康威视网络对讲广播系统远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

Linux:apache优化(7)—— 访问控制

作用&#xff1a;为apache服务提供的页面设置客户端访问权限&#xff0c;为某个组或者某个用户加密访问&#xff1b; /usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/htpasswd tarro1 #添加admin用户&#xff0c;可以在两个路径中间添加-c是新建文件删除原文件&#…

Maya-UE xgen-UE 毛发导入UE流程整理

首先声明&#xff1a;maya建议用2022版本及一下&#xff0c;因为要用到Python 2 ,Maya2023以后默认是Python3不再支持Python2; 第一步&#xff1a;Xgen做好的毛发转成交互式Groom 第二步&#xff1a;导出刚生成的交互式Groom缓存&#xff0c;需要设置一下当前帧&#xff0c;和…

docker Mysql-udf-http

1.Mysql-udf-http镜像已上传到dockerhub中 docker pull heidaodageshiwo/mysql-udf-http:v1 2.启动镜像(默认密码root1234) docker run -tid -p 3306:3306 --namemysql-udf-http --privilegedtrue heidaodageshiwo/mysql-udf-http:v1 3.命令 [rootlocalhost ~]# docker im…

Ultra ISO 虚拟光驱修改光盘盘符

windows xp 环境 ultra iso 虚拟光驱修改光盘盘符 method 1. 在ultra iso 中 [选项]->[配置]->[虚拟光驱]&#xff0c;在新盘符里选指定盘符 ->[修改] method 2. 打开命令行&#xff0c;进入安装目录&#xff0c;如 "C:\Program Files\UltraISO\drivers"&…

【CF比赛记录】—— Good Bye 2023(A、B、C)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;CF比赛记录 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; cf闯关练习 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…