建立模組¶
建立第一個模組之前,必須先建立 Odoo.sh 專案,並知道您的 GitHub 儲存庫網址。
詞彙表
~/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 專案已設定為自動安裝此模組,它將直接出現在資料庫 Dashboard 上。否則,它將可在應用程式應用程式下安裝。
使用正式資料進行測試¶
備註
此步驟需要正式資料庫。如果您尚未擁有,請建立一個。
在開發版本中使用示範資料測試模組並確認準備就緒後,您可以使用預備分支以正式資料測試。
您可以:
將您的開發分支轉換為預備分支,只需拖放至預備區段即可。
將其合併至現有的預備分支,只需拖放至該分支上即可。
使用
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 套件)。但在特定條件下,`可以考慮安裝套件<https://www.odoo.sh/faq#install_dependencies>`_。這也適用於需要系統套件進行編譯的 Python 模組以及第三方 Odoo 模組。
Odoo.sh 不支援 PostgreSQL 擴充功能,因此無法在 Odoo.sh 資料庫中安裝擴充功能(例如 PostGIS、ltree 等)。
例如,要在您的模組中使用 `Unidecode 函式庫<https://pypi.org/project/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檔案。