Tạo một module¶
Trước khi tạo module đầu tiên của bạn, bạn cần tạo một dự án Odoo.sh và biết URL kho lưu trữ GitHub của bạn.
Thuật ngữ
~/srclà thư mục chứa các kho lưu trữ Git liên quan đến các dự án Odoo của bạn.odoolà người dùng GitHub.odoo-addonslà kho lưu trữ GitHub.feature-1là tên của một nhánh phát triển.mainlà tên của nhánh sản xuất.my_modulelà tên của module.
Thay thế chúng khi cần thiết.
Tạo nhánh phát triển¶
Từ chế độ xem Nhánh:
Trong bảng điều hướng nhánh, nhấp vào nút + (Nhánh phát triển mới) bên cạnh Development.
Trong mục Fork, chọn nhánh
main.Trong mục To, nhập
feature-1.
Khi bản dựng sẵn sàng, bạn có thể truy cập trình soạn thảo và mã của nhánh phát triển từ thư mục ~/src/user.
Sao chép kho lưu trữ GitHub của bạn về máy tính bằng cách chạy các lệnh sau:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Tạo nhánh mới bằng cách chạy:
git checkout -b feature-1 main
Tạo cấu trúc phân hệ¶
Khung dựng¶
Mặc dù không bắt buộc, việc khung dựng giúp tránh sự tẻ nhạt khi thiết lập cấu trúc mô-đun Odoo cơ bản. Bạn có thể khung dựng một mô-đun mới bằng cách sử dụng tệp thực thi odoo-bin.
Từ terminal trình soạn thảo, chạy:
odoo-bin scaffold my_module ~/src/user/
Với Odoo đã cài đặt trên máy tính của bạn, chạy:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Mẹo
Nếu bạn không muốn cài đặt Odoo trên máy tính, bạn cũng có thể tải xuống mẫu cấu trúc mô-đun này. Thay thế mọi xuất hiện của my_module bằng tên bạn chọn.
Cấu trúc bên dưới sẽ được tạo ra:
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
Cảnh báo
Chỉ sử dụng các ký tự chữ và số (a-z, 0-9) hoặc dấu gạch dưới (_) khi đặt tên mô-đun của bạn, vì tên của nó được sử dụng cho các lớp Python và tên lớp chứa các ký tự đặc biệt khác ngoài dấu gạch dưới không hợp lệ trong Python.
Bỏ ghi chú các tệp sau:
models/models.pymột ví dụ về mô hình với các trường của nóviews/views.xmlchế độ xem dạng cây và biểu mẫu, với các menu mở chúngdemo/demo.xmlbản ghi demo cho mô hình ví dụcontrollers/controllers.pymột ví dụ về controller triển khai một số routeviews/templates.xmlhai ví dụ về view qweb được sử dụng bởi các route của controller__manifest__.pymanifest của module, bao gồm tiêu đề, mô tả và các tệp dữ liệu cần tải. Bỏ ghi chú tệp dữ liệu danh sách kiểm soát truy cập:# 'security/ir.model.access.csv',
Thủ công¶
Để tạo cấu trúc module theo cách thủ công, hãy làm theo hướng dẫn Server framework 101 để hiểu cấu trúc của một module và nội dung của từng tệp.
Đẩy lên nhánh phát triển¶
Đưa các thay đổi vào vùng staging để commit bằng cách chạy:
git add my_module
Commit các thay đổi của bạn bằng cách chạy:
git commit -m "My first module"Đẩy các thay đổi của bạn lên kho lưu trữ từ xa bằng cách chạy:
Từ terminal trình soạn thảo, chạy:
git push https HEAD:feature-1
Chạy:
git push -u origin feature-1
Chỉ cần chỉ định
-u origin feature-1trong lần đẩy đầu tiên. Sau đó, chạy:git push
Kiểm tra module¶
Nhánh sẽ xuất hiện trong mục Phát triển của bảng điều hướng Xem nhánh.
Nhấp vào tên nhánh để xem lịch sử của nó, bao gồm các thay đổi bạn vừa đẩy lên. Khi cơ sở dữ liệu sẵn sàng, nhấp Kết nối để truy cập.
Nếu dự án Odoo.sh của bạn được cấu hình để tự động cài đặt module, nó sẽ xuất hiện trực tiếp trên bảng điều khiển cơ sở dữ liệu. Nếu không, nó sẽ có sẵn để cài đặt trong ứng dụng Apps.
Kiểm thử bằng dữ liệu production¶
Ghi chú
Một cơ sở dữ liệu production là cần thiết cho bước này. Nếu bạn chưa có, hãy tạo một cơ sở dữ liệu.
Sau khi bạn đã kiểm tra module trong bản build phát triển với dữ liệu demo và tin rằng nó đã sẵn sàng, bạn có thể kiểm tra nó với dữ liệu production bằng cách sử dụng nhánh staging.
Bạn có thể:
Chuyển đổi nhánh phát triển của bạn thành nhánh staging bằng cách kéo và thả nó vào phần Staging.
Hợp nhất nó vào một nhánh staging hiện có bằng cách kéo và thả nó lên nhánh đó.
Sử dụng lệnh
git mergeđể hợp nhất các nhánh của bạn.
Điều này tạo một bản dựng staging mới sao chép cơ sở dữ liệu production và chạy nó trên một máy chủ được cập nhật với các thay đổi mới nhất từ nhánh của bạn.
Khi cơ sở dữ liệu đã sẵn sàng, nhấp vào Connect để truy cập.
Cài đặt module¶
Cài đặt module từ ứng dụng Apps. Vì module có thể không xuất hiện trực tiếp trong danh sách ứng dụng, hãy cập nhật danh sách ứng dụng bằng cách kích hoạt developer mode và nhấp vào .
Ghi chú
Module không được cài đặt tự động, vì mục đích của bản dựng staging là kiểm tra hành vi của các thay đổi của bạn như chúng sẽ có trên cơ sở dữ liệu production, do đó bạn sẽ không muốn một module được cài đặt tự động.
Triển khai trong production¶
Khi bạn đã kiểm tra module trong nhánh staging với dữ liệu production và tin rằng nó đã sẵn sàng cho production, bạn có thể hợp nhất nhánh của mình vào nhánh production bằng cách:
Kéo và thả nhánh staging lên nhánh production.
Sử dụng lệnh
git mergeđể hợp nhất các nhánh của bạn.
Điều này hợp nhất các thay đổi mới nhất từ nhánh staging vào nhánh production và cập nhật máy chủ production với chúng.
Khi cơ sở dữ liệu đã sẵn sàng, nhấp vào Connect để truy cập.
Cài đặt module¶
Cài đặt module từ ứng dụng Apps. Vì module có thể không xuất hiện trực tiếp trong danh sách ứng dụng, hãy cập nhật danh sách ứng dụng bằng cách kích hoạt developer mode và nhấp vào .
Thêm một thay đổi¶
Phần này giải thích cách thêm một thay đổi trong module của bạn bằng cách thêm một trường mới vào một model và triển khai nó.
Từ editor hoặc từ máy tính của bạn, mở thư mục module
~/src/odoo-addons/my_module, sau đó mở tệpmodels/models.pyđể chỉnh sửa. Sau trường description:description = fields.Text()
thêm một trường datetime:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Mở tệp
views/views.xmlvà sau:<field name="value2"/>
thêm:
<field name="start_datetime"/>
Những thay đổi này làm thay đổi cấu trúc cơ sở dữ liệu bằng cách thêm một cột vào một bảng và sửa đổi một view. Để được áp dụng vào một cơ sở dữ liệu hiện có, chẳng hạn như cơ sở dữ liệu production của bạn, những thay đổi này yêu cầu module phải được cập nhật. Nếu bạn muốn việc cập nhật được thực hiện tự động bởi nền tảng Odoo.sh khi bạn push các thay đổi của mình, hãy tăng phiên bản của module trong manifest của nó bằng cách mở
__manifest__.pyvà thay thế:'version': '0.1',
với:
'version': '0.2',
Nền tảng sẽ phát hiện thay đổi phiên bản và kích hoạt cập nhật mô-đun khi triển khai bản sửa đổi mới.
Tiếp theo, đẩy các thay đổi.
Sau khi bạn đã kiểm tra các thay đổi, bạn có thể hợp nhất chúng vào nhánh sản xuất, ví dụ bằng cách kéo và thả nhánh vào nhánh sản xuất trong giao diện Odoo.sh. Vì bạn đã tăng phiên bản mô-đun trong tệp kê khai, nền tảng sẽ tự động cập nhật mô-đun và trường mới của bạn sẽ khả dụng ngay lập tức. Nếu không, bạn có thể cập nhật mô-đun thủ công trong danh sách ứng dụng.
Sử dụng thư viện Python bên ngoài¶
Nếu bạn muốn sử dụng thư viện Python bên ngoài không được cài đặt mặc định, bạn có thể định nghĩa tệp requirements.txt liệt kê các thư viện bên ngoài mà mô-đun của bạn phụ thuộc vào. Nền tảng sẽ sử dụng tệp này để tự động cài đặt các thư viện Python mà dự án của bạn cần.
Ghi chú
Không thể cài đặt hoặc nâng cấp các gói hệ thống trên cơ sở dữ liệu Odoo.sh (ví dụ: gói apt). Tuy nhiên, trong các điều kiện cụ thể, các gói có thể được xem xét để cài đặt. Điều này cũng áp dụng cho các mô-đun Python yêu cầu gói hệ thống để biên dịch và cho các mô-đun Odoo của bên thứ ba.
Các tiện ích mở rộng PostgreSQL không được hỗ trợ trên Odoo.sh do đó không thể cài đặt các tiện ích mở rộng (như PostGIS, ltree, ...) trong cơ sở dữ liệu Odoo.sh.
Ví dụ, để sử dụng thư viện Unidecode trong mô-đun của bạn:
Tạo tệp
requirements.txttrong thư mục gốc của kho lưu trữ của bạn:Từ trình soạn thảo Odoo.sh, tạo và mở tệp
~/src/user/requirements.txt.Từ máy tính của bạn, tạo và mở tệp
~/src/odoo-addons/requirements.txt.
Thêm vào tệp:
unidecode
Bây giờ bạn có thể sử dụng thư viện trong mô-đun của mình, ví dụ để loại bỏ dấu khỏi các ký tự trong trường tên của mô hình. Để làm như vậy, hãy mở tệp
models/models.pyvà trước:from odoo import models, fields, api
thêm:
from unidecode import unidecode
Sau:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
thêm:
@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)
Tăng phiên bản mô-đun để cài đặt phụ thuộc Python bằng cách chỉnh sửa tệp kê khai mô-đun
__manifest__.py.Sau đó, đẩy các thay đổi.
Mẹo
Đưa tệp
requirements.txtvào vùng tổ chức bằng cách chạygit add requirements.txt.