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ữ

  • ~/src là 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.

  • odoo là người dùng GitHub.

  • odoo-addons là kho lưu trữ GitHub.

  • feature-1 là tên của một nhánh phát triển.

  • main là tên của nhánh sản xuất.

  • my_module là 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.

Tạo nhánh con từ nhánh production để tạo nhánh phát triển trên Odoo.sh

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.

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/

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.py một ví dụ về mô hình với các trường của nó

  • views/views.xml chế độ xem dạng cây và biểu mẫu, với các menu mở chúng

  • demo/demo.xml bản ghi demo cho mô hình ví dụ

  • controllers/controllers.py một ví dụ về controller triển khai một số route

  • views/templates.xml hai ví dụ về view qweb được sử dụng bởi các route của controller

  • __manifest__.py manifest 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

  1. Đưa các thay đổi vào vùng staging để commit bằng cách chạy:

    git add my_module
    
  2. Commit các thay đổi của bạn bằng cách chạy:

    git commit -m "My first module"
    
  3. Đẩy các thay đổi của bạn lên kho lưu trữ từ xa bằng cách chạy:

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.

Ví dụ về một nhánh phát triển

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út kết nối để truy cập cơ sở dữ liệu

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.

Module mới trên bảng điều khiển cơ sở dữ liệu

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 Update Apps List ‣ Update.

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 Update Apps List ‣ Update.

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ó.

  1. 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ệp models/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())
    
  2. Mở tệp views/views.xml và sau:

    <field name="value2"/>
    

    thêm:

    <field name="start_datetime"/>
    
  3. 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__.py và 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.

  4. Tiếp theo, đẩy các thay đổi.

  5. 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:

  1. Tạo tệp requirements.txt trong 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.

  2. Thêm vào tệp:

    unidecode
    
  3. 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.py và trước:

    from odoo import models, fields, api
    

    thêm:

    from unidecode import unidecode
    
  4. 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)
    
  5. 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.

  6. Sau đó, đẩy các thay đổi.

    Mẹo

    Đưa tệp requirements.txt vào vùng tổ chức bằng cách chạy git add requirements.txt.