你的第一個模塊?

概覽?

本章節將幫助您創建第一個Odoo模塊并在您的Odoo.sh項目中部署它。

本教程需要:您已經在Odoo.sh上創建了一個項目(參見: 創建您的項目 ),并且您知道您的Github倉庫的URL。

解釋了Git和Github的基本使用。

以下假設已經做出:

  • ~/src 是您的 Odoo 項目相關的 Git 存儲庫所在的目錄,

  • odoo 是 Github 用戶,

  • odoo-addons 是 Github 存儲庫,

  • feature-1 是一個開發分支的名稱,

  • master 是生產分支的名稱,

  • my_module 是模塊的名稱。

將這些替換為您選擇的值。

創建開發分支?

來自Odoo.sh?

在分支視圖中:

  • 點擊開發階段旁邊的 + 按鈕,

  • Fork 選項中選擇分支 master ,

  • To 輸入框中輸入 feature-1 。

    圖片1 圖片2

構建完成后,您可以訪問編輯器并瀏覽到文件夾 ~/src/user ,以訪問您的開發分支的代碼。

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

從您的電腦?

在您的計算機上克隆您的 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 ):

$ ./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中是無效的。

取消文件中的注釋內容:

  • models/models.py ,帶有字段的模型示例,

  • views/views.xml ,包含一個樹形視圖和一個表單視圖,菜單可以打開它們。

  • demo/demo.xml , 上述示例模型的演示記錄,

  • controllers/controllers.py ,一個實現一些路由的控制器示例,

  • views/templates.xml ,這是上述控制器路由使用的兩個示例 qweb 視圖。

  • __manifest__.py ,你的模塊清單,包括標題、描述和要加載的數據文件。你只需要取消注釋訪問控制列表數據文件即可:

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

手動?

如果您想手動創建模塊結構,可以按照 開始 教程了解模塊的結構和每個文件的內容。

推送開發分支?

暫存要提交的更改

$ git add my_module

提交您的更改

$ git commit -m "My first module"

將您的更改推送到遠程存儲庫

從 Odoo.sh 編輯器終端:

$ git push https HEAD:feature-1

上述命令在 在線編輯器 章節的 提交和推送你的更改 小節中有詳細解釋。其中包括了你將被提示輸入用戶名和密碼的說明,以及如果你使用雙重認證應該怎么做。

或者,從您的計算機終端:

$ git push -u origin feature-1

你只需要在第一次推送時指定 -u origin feature-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

你也可以使用 git merge 命令來合并你的分支。

這將創建一個新的暫存構建,它將復制生產數據庫并使用更新了您分支的最新更改的服務器運行。

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

數據庫準備好后,您可以使用“連接”按鈕訪問它。

安裝您的模塊?

您的模塊不會自動安裝,您需要從應用程序菜單中安裝它。事實上,暫存構建的目的是測試您的更改行為,就像在生產環境中一樣,您不希望您的模塊自動安裝,而是按需安裝。

你的模塊可能不會直接出現在應用程序中,你需要先更新應用程序列表:

  • 激活 開發者模式

  • 在應用程序菜單中,點擊“更新應用程序列表”按鈕,

  • 在彈出的對話框中,點擊 更新 按鈕。

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

然后您的模塊將出現在可用應用程序列表中。

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

部署到生產環境?

一旦您在帶有生產數據的暫存分支中測試了您的模塊,并且認為它已經準備好投入生產,您可以將您的分支合并到生產分支中。

將您的暫存分支拖放到生產分支上。

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

你也可以使用 git merge 命令來合并你的分支。

這將合并您的暫存分支中的最新更改到生產分支中,并使用這些最新更改更新您的生產服務器。

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

數據庫準備好后,您可以使用“連接”按鈕訪問它。

安裝您的模塊?

你的模塊不會自動安裝,你需要按照 上面關于在測試數據庫中安裝你的模塊的章節 中所述手動安裝。

添加一個變更?

本節將介紹如何通過在模型中添加新字段并部署來在您的模塊中添加更改。

從Odoo.sh編輯器中,
  • 瀏覽到您的模塊文件夾 ~/src/user/my_module ,

  • 然后,打開文件 models/models.py 。

或者,從您的電腦中,
  • 使用您選擇的文件瀏覽器瀏覽到您的模塊文件夾 ~/src/odoo-addons/my_module ,

  • 然后,使用您選擇的編輯器(如 Atom * , * Sublime Text * , * PyCharm * , * vim * 等)打開文件 * 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',

平臺將檢測版本變化并在新版本部署時觸發模塊的更新。

瀏覽到您的 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模塊 。

  • PostgreSQL擴展 在Odoo.sh上不受支持。

  • 欲了解更多信息,請查閱我們的 FAQ.

平臺將使用此文件自動安裝您的項目所需的Python庫。

本節將通過在您的模塊中使用 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)

添加一個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