前言
本章的目的是为创建一个全新的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,
您甚至可以安装启用该模块!但显然它是一个空壳,所以不会出现菜单。