Модули
Оглавление:
Что такое модуль
Модули в Odoo - это строительные блоки. Если вы хотите что-то добавить или изменить в системе, вам необходимо создать модуль внутри которого будут находится все необходимые файлы.
Модуль - это каталог в котором обязательно должен находиться файл __manifest__.py
. Какие параметры нужно указывать в этом файле, вы можете узнать из этой статьи документации
Техническое имя модуля - это имя каталога в котором находится файл __manifest__.py
. Его можно увидеть если зайти в каталог приложений и включить режим разработчика:
Техническое имя модуля является важной частью пространства имен самой odoo. Модули могут зависеть от других модулей, и тогда их технические имена(имена их каталогов) нужно прописывать в ключе depends
в файле __manifest__.py
. Так же при использование xml_id
идентификаторов(о них я напишу позже), полный идентификатор состоит из технического имени модуля и уникального id
записи внутри этого модуля.
В дальнейшем, если я пишу "имя модуля", то я имею ввиду его техническо имя (имя каталога)
Модуль так же могут называть приложением. Как правило приложение это не один модуль а несколько модулей, объединенных между собой цепочкой зависимостей.
В модуле должны находится все файлы и ресурсы, которые необходимы для работы. Как правильно оформлять содержимое модуля можно посмотреть вот здесь
Если модули - это просто каталоги, то где платформа odoo находит их? Сама платформа ищет сканирует каталоги, которые указаны в параметре addons_path
в файле конфигурации. В этот параметр не надо добавлять каталоги с самими модулями, в него надо добавлять каталоги, в которых находятся каталоги с модулями, например:
На этом скриншоте мы видим, как подключаются каталоги с модулями. В правой части у нас в файле конфигурации указан путь к каталогу с модулями, а в левой дерево файловой системы контейнера.
Установка и обновление модуля
Чтобы все изменения, которые мы хотим привнести в систему odoo применились, нам необходимо установить модуль. Модуль так же можно обновить.
Сделать это можно как с помощью графического интерфейса:
- Нажмите на главное меню
- Нажмите на пункт
Apps
- Найдите нужный вам модуль и нажмите
Activate
Дождитесь обновления страницы.
Как вы видели на первой картинке, наш модуль из демо проекта уже был установлен с самого начала. Добились мы этого другим способом.
При ведении разработки, или например автоматическом развертывании базы, устанавливать модули вручную не всегда удобно и для этого есть параметр командной строки -i, подробнее можно ознакомится тут. Если в этом параметре указать список имен модулей, то при запуске система попытается сама их установить. Обращаю ваше внимание на то, что вы работаете через менеджер разработки и он поддерживает только те параметры командной строки, которые указаны в документации. При разработке менеджера я решил, что каждый раз указывать при запуске списка модулей которые надо установить (инициализировать) это не очень удобно и я перенес этот список в файл конфигурации config.json
где в параметре init_modules
вы можете указать весь список, а при запуске системы достаточно указать параметр -i.
Чтобы обновить наш модуль first_module
:
- В поиске введите его техническое имя
- Нажмите на три точки в правом верхнем углу плитки и выберите в появившемся меню пункт
Upgrade
Таким образом запуститься процесс обновления модуля.
Так же вы можете сделать это с помощью параметра командной строки -u
, его использование аналогично использованию параметра -i
. В файле конфигурации указываете список модулей, который хотите обновить и при перезапуске системы он обновится.
В чем разница между установкой и обновлением?
- При установке имя модуля записывается в реестр системы (об этом напишу позже) и система уже будет знать об этом модуле
- Если модуль не установлен, то система будет игнорировать его python файлы при перезапуске. Т.е. когда вы устанавливаете модуль, потом вносите изменения в python файл, то при перезапуске система автоматически их подхватит. Такова особенность платформы.
- При установке модуля система будет игнорировать атрибут в
xml
-файлах какno_update
и если в файле конфигурации параметрwithout_demo
будет установлен какFalse
система принудительно установит демо-данные модуля. - При обновлении модуля система находит указанный модуль и обновляет все данные указанные в
xml
-файлах. Т.е. в момент обновления система парсит их и обновляет в базе данных все связанные с ними записи. (В связи с этим есть некоторые тонкости, расскажу об этом в статье обxml
-файлах) - При обновлении, все записи, которые находятся внутри тега с атрибутом
no_update
, буду проигнорированы и не обновлены.
Обсуждение
Обсудить, указать на ошибки и опечатки можно здесь