创建模块¶
在创建第一个模块之前,需要创建 Odoo.sh 项目并了解您的 GitHub 仓库 URL。
术语表
~/src是与您的 Odoo 项目相关的 Git 仓库所在的目录。odoo是 GitHub 用户。odoo-addons是 GitHub 仓库。feature-1是开发分支的名称。main是生产分支的名称。my_module是模組的名稱。
根據需要替換這些內容。
创建开发分支¶
创建模块结构¶
搭建¶
雖然不是必需的,但搭建可以避免設定基本 Odoo 模組結構的繁瑣工作。您可以使用 odoo-bin可執行檔搭建新模組。
從編輯器終端機執行:
odoo-bin scaffold my_module ~/src/user/
在電腦上安裝 Odoo後,執行:
./odoo-bin scaffold my_module ~/src/odoo-addons/
小技巧
如果您不想在電腦上安裝 Odoo,也可以下載此模組結構範本。將每個 my_module替換為您選擇的名稱。
將產生以下結構:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ ├── ir.model.access.csv
│ └── models.py
└── views
├── templates.xml
└── views.xml
警告
為模組命名時僅使用字母數字字元(a-z、0-9)或底線(_),因為模組名稱用於 Python 類別,而包含底線以外的特殊字元的類別名稱在 Python 中無效。
取消註解以下檔案:
models/models.py模型及其字段的示例views/views.xml树视图和表单视图,以及打开它们的菜单demo/demo.xml示例模型的演示记录controllers/controllers.py实现一些路由的控制器示例views/templates.xml控制器路由使用的两个示例qweb视图__manifest__.py模块的清单文件,包括标题、描述和要加载的数据文件。取消注释访问控制列表数据文件:# 'security/ir.model.access.csv',
手动¶
要手动创建模块结构,请按照Server framework 101教程了解模块的结构和每个文件的内容。
推送到开发分支¶
通过运行以下命令暂存要提交的更改:
git add my_module
通过运行以下命令提交更改:
git commit -m "My first module"通过运行以下命令将更改推送到远程仓库:
运行:
git push -u origin feature-1
只有在第一次推送时才需要指定
-u origin feature-1。之后运行:git push
测试模块¶
该分支应显示在分支视图导航面板的开发部分下。
点击分支名称以查看其历史记录,包括您刚刚推送的更改。数据库准备就绪后,点击连接以访问它。
如果您的Odoo.sh项目配置为自动安装模块,它将直接显示在数据库仪表板上。否则,它将在应用应用下可供安装。
使用生产数据进行测试¶
注解
此步骤需要生产数据库。如果您还没有,请创建一个。
在开发构建中使用演示数据测试模块并认为已准备就绪后,可以使用预发布分支通过生产数据进行测试。
您可以:
将开发分支转换为预发布分支,方法是将其拖放到预发布部分。
将其合并到现有预发布分支,方法是将其拖放到该分支上。
使用
git merge命令合并分支。
这将创建一个新的预发布构建,该构建复制生产数据库并在使用分支最新更改更新的服务器上运行它。
数据库准备就绪后,点击连接访问它。
安装模块¶
从应用应用安装模块。由于模块可能不会直接显示在应用列表中,请通过激活开发者模式并点击来更新应用列表。
注解
模块不会自动安装,因为预发布构建的目的是测试您的更改在生产数据库上的行为,因此您不希望模块自动安装。
在生产环境中部署¶
在预发布分支中使用生产数据测试模块并认为已准备好投入生产后,可以通过以下方式将分支合并到生产分支:
将预发布分支拖放到生产分支上。
使用
git merge命令合并分支。
这会将预发布分支的最新更改合并到生产分支中,并使用这些更改更新生产服务器。
数据库准备就绪后,点击连接访问它。
安装模块¶
从应用应用安装模块。由于模块可能不会直接显示在应用列表中,请通过激活开发者模式并点击来更新应用列表。
添加更改¶
本节说明如何通过在模型中添加新字段并部署它来在模块中添加更改。
从编辑器或从您的计算机,打开模块文件夹
~/src/odoo-addons/my_module,然后打开models/models.py文件进行编辑。在描述字段之后:description = fields.Text()
添加日期时间字段:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
打开
views/views.xml文件,在以下内容之后:<field name="value2"/>
添加:
<field name="start_datetime"/>
这些更改通过向表中添加列并修改视图来改变数据库结构。要将这些更改应用于现有数据库(例如您的生产数据库),需要更新模块。如果您希望在推送更改时由 Odoo.sh 平台自动执行更新,请通过打开
__manifest__.py来增加模块清单中的版本号,并将:'version': '0.1',
替换为:
'version': '0.2',
平台将检测到版本更改,并在部署新修订版本时触发模块更新。
接下来,推送更改。
在您测试更改后,可以将它们合并到生产分支中,例如,通过在 Odoo.sh 界面中将分支拖放到生产分支上。由于您在清单中增加了模块版本,平台将自动更新模块,您的新字段将立即可用。否则,您可以在应用程序列表中手动更新模块。
使用外部 Python 库¶
如果您希望使用默认未安装的外部 Python 库,可以定义一个requirements.txt文件,列出模块所依赖的外部库。平台将使用此文件自动安装您的项目所需的 Python 库。
注解
无法在 Odoo.sh 数据库上安装或升级系统软件包(例如 apt 软件包)。但是,在特定条件下,可以考虑安装软件包。这也适用于需要系统软件包进行编译的 Python 模块以及第三方 Odoo 模块。
Odoo.sh 不支持 PostgreSQL 扩展,因此无法在 Odoo.sh 数据库中安装扩展(例如 PostGIS、ltree 等)。
例如,要在模块中使用 Unidecode 库:
在仓库的根文件夹中创建文件
requirements.txt:从 Odoo.sh 编辑器中,创建并打开文件
~/src/user/requirements.txt。从您的计算机上,创建并打开文件
~/src/odoo-addons/requirements.txt。
在文件中添加:
unidecode
现在您可以在模块中使用该库,例如,从模型的名称字段中的字符中删除重音符号。为此,打开
models/models.py文件,在以下内容之前:from odoo import models, fields, api
添加:
from unidecode import unidecode
之后:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
添加:
@api.model def create(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).create(values) def write(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).write(values)
通过编辑模块的清单
__manifest__.py来增加模块版本以安装 Python 依赖项。然后,推送更改。
小技巧
通过运行
git add requirements.txt暂存requirements.txt文件。