Створення модуля¶
Перш ніж створювати свій перший модуль, необхідно створити проєкт Odoo.sh і знати URL-адресу вашого репозиторію GitHub.
Глосарій
~/src— це каталог, де розташовані репозиторії Git, пов’язані з вашими проєктами Odoo.odoo— це користувач GitHub.odoo-addons— це репозиторій GitHub.feature-1— це назва гілки розробки.main— це назва виробничої гілки.my_module— це назва модуля.
Замініть їх за необхідності.
Створення гілки розробки¶
З виду гілок:
На панелі навігації гілок натисніть кнопку + (Нова гілка розробки) поруч із Development.
У розділі Fork виберіть гілку
main.У розділі To введіть
feature-1.
Після того, як збірка буде готова, ви зможете отримати доступ до редактора та коду вашої гілки розробки з папки ~/src/user.
Клонуйте ваш репозиторій GitHub на комп’ютер, виконавши такі команди:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Створіть нову гілку, виконавши:
git checkout -b feature-1 main
Створення структури модуля¶
Створення каркасу¶
Хоча це не обов’язково, створення каркасу дозволяє уникнути рутинної роботи зі встановленням базової структури модуля 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 https HEAD:feature-1
Виконайте:
git push -u origin feature-1
Необхідно вказувати
-u origin feature-1лише під час першого надсилання. Після цього виконуйте:git push
Тестування модуля¶
Гілка має з’явитися в розділі Розробка навігаційної панелі перегляду гілок.
Клацніть назву гілки, щоб переглянути її історію, включаючи зміни, які ви щойно надіслали. Коли база даних буде готова, клацніть Підключитися, щоб отримати до неї доступ.
Якщо ваш проект Odoo.sh налаштовано на автоматичне встановлення модуля, він з’явиться безпосередньо на дашборді бази даних. В іншому випадку він буде доступний для встановлення в програмі Програми.
Тестування з виробничими даними¶
Примітка
Для цього кроку потрібна виробнича база даних. Якщо у вас її ще немає, створіть її.
Після того, як ви протестували модуль у збірці розробки з демонстраційними даними і вважаєте, що він готовий, ви можете протестувати його з виробничими даними, використовуючи проміжну гілку.
Ви можете:
Перетворіть вашу гілку розробки на проміжну гілку, перетягнувши її в розділ Staging.
Об’єднайте її з наявною проміжною гілкою, перетягнувши її на цю гілку.
Використовуйте команду
git mergeдля об’єднання ваших гілок.
Це створює нову проміжну збірку, яка дублює виробничу базу даних і запускає її на сервері, оновленому останніми змінами з вашої гілки.
Після готовності бази даних натисніть Connect, щоб отримати до неї доступ.
Встановіть модуль¶
Встановіть модуль з програми Apps. Оскільки модуль може не з’явитися безпосередньо у списку програм, оновіть список програм, активувавши режим розробника та натиснувши .
Примітка
Модуль не встановлюється автоматично, оскільки мета проміжної збірки полягає в тестуванні поведінки ваших змін так, як вони були б у виробничій базі даних, тому ви не хотіли б, щоб модуль встановлювався автоматично.
Розгортання у виробничому середовищі¶
Після того, як ви протестуєте модуль у проміжній гілці з виробничими даними і вважаєте, що він готовий до виробництва, ви можете об’єднати вашу гілку з виробничою гілкою:
Перетягніть проміжну гілку на виробничу гілку.
Використовуйте команду
git mergeдля об’єднання ваших гілок.
Це об’єднує останні зміни з проміжної гілки у виробничу гілку та оновлює виробничий сервер з ними.
Після готовності бази даних натисніть Connect, щоб отримати до неї доступ.
Встановіть модуль¶
Встановіть модуль з програми Apps. Оскільки модуль може не з’явитися безпосередньо у списку програм, оновіть список програм, активувавши режим розробника та натиснувши .
Додавання зміни¶
У цьому розділі пояснюється, як додати зміну в ваш модуль, додавши нове поле в модель і розгорнувши його.
З редактора або з вашого комп’ютера відкрийте папку модуля
~/src/odoo-addons/my_module, потім відкрийте файлmodels/models.py, щоб відредагувати його. Після поля опису:description = fields.Text()
додайте поле datetime:
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). Однак за певних умов пакети можуть бути розглянуті для встановлення. Це також стосується модулів Python, які потребують системних пакетів для компіляції, та сторонніх модулів Odoo.
Розширення PostgreSQL не підтримуються в Odoo.sh, тому неможливо встановити розширення (такі як PostGIS, ltree тощо) в базах даних Odoo.sh.
Наприклад, щоб використовувати бібліотеку 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.Потім надішліть зміни.
Порада
Додайте файл
requirements.txtдо індексу, виконавши командуgit add requirements.txt.