odoo17 | 创建一个新应用程序

news2024/11/27 11:33:36

前言

本章的目的是为创建一个全新的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.coloradmin.cn/o/1349329.html

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

相关文章

详解Vue3中的事件监听方式

本文主要介绍Vue3中的事件监听方式。 目录 一、v-on指令二、使用符号简写三、事件修饰符四、动态事件名五、常见的监听事件六、自定义事件 在Vue3中,事件监听的方式与Vue2有一些不同。 下面是Vue3中事件监听方式的详细介绍: 一、v-on指令 Vue3中仍然使…

【java爬虫】使用element-plus进行个股详细数据分页展示

前言 前面的文章我们讲述了获取详细个股数据的方法,并且使用echarts对个股的价格走势图进行了展示,本文将编写一个页面,对个股详细数据进行展示。别问涉及到了element-plus中分页的写法,对于这部分知识将会做重点讲解。 首先看一…

计算机网络课程设计-企业网三层架构

(单人版) 摘 要 本篇报告主要解决了为一家名为西宫的公司网络搭建问题,该网络采用企业网三层架构对完了过进行设计。首先使用以太网中继,主要使用VLAN划分的技术来划定不同部门。使用MSTP对每个组配置生成树,防止交换机…

TecoGAN视频超分辨率算法

1. 摘要 对抗训练在单图像超分辨率任务中非常成功,因为它可以获得逼真、高度细致的输出结果。因此,当前最优的视频超分辨率方法仍然支持较简单的范数(如 L2)作为对抗损失函数。直接向量范数作损失函数求平均的本质可以轻松带来时…

ubuntu:beyond compare 4 This license key has been revoked 解决办法

https://www.cnblogs.com/zhibei/p/12095431.html 错误如图所示: 解决办法: (1)先用find命令找到bcompare所在位置:sudo find /home/ -name *bcompare (2)进入 /home/whf/.config,删除/bco…

【UnityShader入门精要学习笔记】(1)了解渲染流水线

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 渲染流水线什么是流水线什么…

BLP模型

本篇文章是调研了许多资料后对 BLP 模型的一个总结 首发公号:Rand_cs MLS,Multi-level Security,主要关心的是数据机密性 D. Elliott Bell 和 Leonard J. LaPadula 在 1996 年提出了基本的 BLP 模型,主要有两个性质:…

[线代]不挂科猴博士

行列式的性质 行列式的计算及应用 矩阵的运算上(加减,相乘,取行列式) 矩阵的运算下(转置,逆,秩) 向量组与线性空间 解方程组

openGauss学习笔记-182 openGauss 数据库运维-升级-升级前准备与检查

文章目录 openGauss学习笔记-182 openGauss 数据库运维-升级-升级前准备与检查182.1 升级前准备与检查清单182.2 收集节点信息182.3 备份数据182.4 获取升级包182.5 健康检查182.5.1 前提条件182.5.2 操作步骤 182.6 检查数据库节点磁盘使用率182.7 检查数据库状态182.7.1 验证…

exposure_line 是如何曝光的 ?

1、读者提问: exposure_line 是如何曝光的,我看网上说这个代表的是一帧曝光多少行, 那如果一帧 exposure_line 小于frame_length,那一帧后面的行就不曝光吗? 不知道怎么理解,是曝光到1500行,…

动态内存分配函数

malloc void* malloc( unsigned size) 申请size个字节的地址连续的内存单元 成功则返回指向内存块的指针, 失败则返回NULL malloc不对申请的空间初始化 calloc void*calloc(unsigned n,unsigmed size) 申请n* size字节的个地址连续的内…

骑砍战团MOD开发(30)-游戏大地图map.txt

骑砍1战团mod开发-大地图制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rz4y1c7wH/ 一.骑砍游戏大地图 骑砍RTS视角游戏大地图 大地图静态模型(map.txt) 军团/城镇图标(module_parties.py). 骑砍大地图的战争迷雾和天气通过API进行管理和控制: # Weather-h…

数据库视图学习

视图 视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果&…

Zookeeper注册中心实战

Java学习手册面试指南:https://javaxiaobear.cn Spring Cloud Zookeeper通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring Boot 应用程序提供Apache Zookeeper集成。通过一些简单的注释,您可以快速启用和配置应用…

一起学Elasticsearch系列-Mapping

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 文章目录 Mapping 的基本概念查看索引 Mapping 字段数据类型数字类型基本数据类型Keywords 类型日期类型对象类型空间数据类型文档排名类型文本搜索类型 两种映射类型自动映…

IRQ Handler 的使用——以USART串口接收中断分别在标准库与HAL库版本下的举例

前言: 1.中断系统及EXTI外部中断知识点见我的博文: 9.中断系统、EXTI外部中断_eirq-CSDN博客文章浏览阅读301次,点赞7次,收藏6次。EXTI(Extern Interrupt)外部中断EXTI可以监测指定GPIO口的电平信号&…

Group k-fold解释和代码实现

Group k-fold解释和代码实现 文章目录 一、Group k-fold解释和代码实现是什么?二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释 四、总结 一、Group k-fold解释和代码实现是什么? 0,1…

MP4文件中mvhd容器中的“下一个track ID”字段的作用是什么?(下一个轨道id)(新轨道id)

文章目录 mvhd容器中有以下字段其中有个“下一个track ID”字段不知道是干什么用的,它被放在这个mvhd容器的最后“下一个track ID”什么是“下一个track ID”“下一个track ID”的作用唯一性标识轨道管理 “下一个track ID”的必要性命令/代码演示 新轨道ID的含义和…

MySQL8.0 ROW_NUMBER 调用案例

ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应用的每一行分配一个序号。 创建表和生成所需要的数据 CREATE TABLE chapter11 ( shopname VARCHAR(255) NULL, sales VARCHAR(255) NULL, sale_date DATE NULL ); INSERT INTO chapter11 (shopname, sales, sal…

C语言之scanf浅析

前言&#xff1a; 当有了变量&#xff0c;我们需要给变量输入值就可以使用scanf函数&#xff0c;如果需要将变量的值输出在屏幕上的时候可以使用printf函数&#xff0c;如&#xff1a; #include <stdio.h> int main() {int score 0;printf("请输⼊成绩:");sc…