您的第一个模块

概述

本章帮助您创建第一个 Odoo 模块并将其部署到 Odoo.sh 项目中。

本教程需要 :ref:’您在 Odoo.sh’ 上创建了一个项目 <odoosh-gettingstarted-create>,并且您知道 Github 存储库的 URL。</odoosh-gettingstarted-create>

解释了Git和Github的基本用法。

假设如下:

  • ~/src 是与您的 Odoo 项目相关的 Git 存储库所在的目录,

  • odoo 是 Github 用户,

  • odoo-addons 是 Github 的存储库,

  • feature-1 是开发分支的名称,

  • master 是生产分支的名称,

  • my_module 是模块的名称。

将这些值替换为您选择的值。

创建开发分支

从 Odoo.sh

在分支视图中:

  • 点击开发阶段旁边的:code:`+`按钮,

  • 分叉 选择中选择分支

  • To 输入中键入 feature-1

    |图片1| |图片2|

创建生成后,可以访问编辑器并浏览到文件夹 ~/src/user 以访问开发分支的代码。

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

画出你最漂亮的签名!<br>你也可以自动创建一个,或者从你的电脑中加载一个签名。

在您的计算机上克隆 Github 存储库:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

创建新分支:

$ git checkout -b feature-1 master

创建模块结构

搭建模块的脚手架

虽然不是必需的,但脚手架避免了设置基本Odoo模块结构的乏味。您可以使用可执行文件 odoo-bin 构建新模块的基架。

在 Odoo.sh 编辑器中,在终端中:

$ 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
└── views
    ├── templates.xml
    └── views.xml

警告

不要使用下划线 ( _ ) 以外的特殊字符作为模块名称,甚至不要使用连字符 ( - )。此名称用于模块的 Python 类,并且具有下划线以外的特殊字符的类名称在 Python 中无效。

取消注释文件的内容:

  • 模型/模型.py,模型及其字段的示例,

  • 视图/视图.xml,树和窗体视图,菜单打开它们,

  • 演示/演示.xml,上述示例模型的演示记录,

  • 控制器/控制器.py,控制器实现某些路由的示例,

  • 视图/模板.xml,上述控制器路由使用的两个示例 qweb 视图,

  • __manifest__.py,模块的清单,包括例如其标题,描述和要加载的数据文件。您只需要取消注释访问控制列表数据文件:

    # 'security/ir.model.access.csv',
    

手工

如果想手动创建模块结构,可以参考 Getting started 教程,了解模块结构和每个文件的内容。

推送开发分支

暂存要提交的更改

$ git add my_module

提交更改

$ git commit -m "My first module"

将更改推送到远程存储库

从 Odoo.sh 编辑器终端:

$ git push https HEAD:feature-1

上面的命令在 :ref:` <odoosh-gettingstarted-online-editor-push>Online Editor` 章节的 :ref:Commit & Push your changes <odoosh-gettingstarted-online-editor> 一节中进行了解释。它包括有关系统将提示您键入用户名和密码的事实的解释,以及如果您使用双因素身份验证该怎么办。</odoosh-gettingstarted-online-editor>

或者,从您的计算机终端:

$ git push -u origin feature-1

您只需要为第一次推送指定 -u 源要素-1。从那时起,要从计算机推送未来的更改,您只需使用

$ git push

测试您的模块

分支应显示在项目的开发分支中。

../../../_images/firstmodule-test-branch.png

在项目的分支视图中,您可以单击左侧导航面板中的分支名称以访问其历史记录。

../../../_images/firstmodule-test-branch-history.png

您可以在此处看到您刚刚推送的更改,包括您设置的评论。数据库准备就绪后,您可以通过单击“*连接”按钮来访问它。

../../../_images/firstmodule-test-database.png

如果您的 Odoo.sh 项目配置为自动安装模块,您将直接在数据库应用程序中看到它。否则,它将在要安装的应用程序中可用。

然后,您可以试用模块,创建新记录并测试功能和按钮。

使用生产数据进行测试

此步骤需要有一个生产数据库。如果您还没有它,则可以创建它。

在开发版本中使用演示数据测试模块并认为它已准备就绪后,可以使用过渡分支使用生产数据对其进行测试。

你可以选择:

  • 将开发分支拖放到 staging 部分标题上,使开发分支成为过渡分支。

    ../../../_images/firstmodule-test-devtostaging.png
  • 将其合并到现有暂存分支中,方法是将其拖放到给定的暂存分支上。

    ../../../_images/firstmodule-test-devinstaging.png

您还可以使用 :code:git merge 命令来合并您的分支。

这将创建一个新的暂存版本,该版本将复制生产数据库,并使其使用使用分支的最新更改更新的服务器运行。

../../../_images/firstmodule-test-mergedinstaging.png

数据库准备就绪后,您可以使用*连接*按钮访问它。

安装模块

您的模块不会自动安装,您必须从应用程序菜单中安装它。实际上,暂存生成的目的是测试更改的行为,就像在生产环境中一样,在生产环境中,您不希望模块自动安装,而是按需安装。

您的模块可能不会直接显示在您的应用程序中进行安装,您需要先更新您的应用程序列表:

  • 激活 :ref:开发者模式 <developer-mode>

  • 在应用程序菜单中,单击*更新应用程序列表*按钮,

  • 在出现的对话框中,单击“更新”按钮。

    ../../../_images/firstmodule-test-updateappslist.png

然后,您的模块将显示在可用应用程序列表中。

../../../_images/firstmodule-test-mymoduleinapps.png

在生产环境中部署

使用生产数据在过渡分支中测试模块并认为它已准备好投入生产后,即可在生产分支中合并分支。

将过渡分支拖放到生产分支上。

../../../_images/firstmodule-test-mergeinproduction.png

您还可以使用 :code:git merge 命令来合并您的分支。

这将合并生产分支中过渡分支的最新更改,并使用这些最新更改更新生产服务器。

../../../_images/firstmodule-test-mergedinproduction.png

数据库准备就绪后,您可以使用*连接*按钮访问它。

安装模块

您的模块不会自动安装,您必须手动安装它,如 :ref:`以上关于在临时数据库中安装模块 <odoosh-gettingstarted-firstmodule-productiondata-install>的部分中所述。.</odoosh-gettingstarted-firstmodule-productiondata-install>

添加更改

本节说明如何通过在模型中添加新字段并在模型中部署它来添加更改。

来自 Odoo.sh 编辑器,
  • 浏览到您的模块文件夹 ~/src/user/my_module

  • 然后,打开文件*模型/模型.py*。

画出你最漂亮的签名!<br>你也可以自动创建一个,或者从你的电脑中加载一个签名。
  • 使用您选择的文件浏览器浏览到您的模块文件夹 ~/src/odoo-addons/my_module

  • 然后,使用您选择的编辑器打开文件*模型/模型.py*,例如*Atom*,崇高文本PyCharmvim,…

然后,在描述字段之后

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',

平台将检测版本更改,并在新修订版部署时触发模块更新。

浏览到您的 Git 文件夹。

然后,从 Odoo.sh 终端:

$ cd ~/src/user/

或者,从您的计算机终端:

$ cd ~/src/odoo-addons/

然后,暂存要提交的更改

$ git add my_module

提交更改

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

推送您的更改:

从 Odoo.sh 终端:

$ git push https HEAD:feature-1

或者,从您的计算机终端:

$ git push

然后,平台将为分支 feature-1 创建一个新的构建版本。

../../../_images/firstmodule-test-addachange-build.png

测试更改后,可以在生产分支中合并更改,例如,通过在 Odoo.sh 界面中将分支拖放到生产分支上。当您在清单中增加模块版本时,平台将自动更新模块,并且您的新字段将直接可用。否则,您可以手动更新应用程序列表中的模块。

使用外部 Python 库

如果要使用默认情况下未安装的外部 Python 库,可以定义一个 requirements.txt 文件,列出模块所依赖的外部库。

注解

  • 无法在 Odoo.sh 数据库上安装或升级系统软件包(如 apt 软件包)。不过,在特定条件下,可以考虑安装软件包。这也适用于需要系统软件包进行编译的**Python 模块**和**第三方 Odoo 模块**。

  • Odoo.sh 不支持 PostgreSQL 扩展

  • 更多信息,请参阅我们的 `FAQ<https://www.odoo.sh/faq#install_dependencies>`_

平台将使用此文件自动安装项目所需的 Python 库。

本节通过使用模块中的“Unidecode 库<https://pypi.python.org/pypi/Unidecode>”_ 来解释该功能。

在存储库的根文件夹中创建一个文件 要求.txt

在 Odoo.sh 编辑器中,创建并打开文件 ~/src/user/requirements.txt。

或者,从您的计算机中创建并打开文件~/src/odoo-addons/requirements.txt。

增加

unidecode

然后使用模块中的库,例如,从模型名称字段中的字符中删除重音符号。

打开文件 模型/模型.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)

添加 Python 依赖项需要增加模块版本,以便平台安装它。

编辑模块清单 __manifest__.py

更换

'version': '0.2',

使用

'version': '0.3',

暂存并提交更改:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

然后,推送更改:

在 Odoo.sh 终端中:

$ git push https HEAD:feature-1

在您的计算机终端中:

$ git push