Модули

Оглавление:

Что такое модуль

Модули в Odoo - это строительные блоки. Если вы хотите что-то добавить или изменить в системе, вам необходимо создать модуль внутри которого будут находится все необходимые файлы.

Модуль - это каталог в котором обязательно должен находиться файл __manifest__.py. Какие параметры нужно указывать в этом файле, вы можете узнать из этой статьи документации

Техническое имя модуля - это имя каталога в котором находится файл __manifest__.py. Его можно увидеть если зайти в каталог приложений и включить режим разработчика:

Имя модуля

Техническое имя модуля является важной частью пространства имен самой odoo. Модули могут зависеть от других модулей, и тогда их технические имена(имена их каталогов) нужно прописывать в ключе depends в файле __manifest__.py. Так же при использование xml_id идентификаторов(о них я напишу позже), полный идентификатор состоит из технического имени модуля и уникального id записи внутри этого модуля.

В дальнейшем, если я пишу "имя модуля", то я имею ввиду его техническо имя (имя каталога)

Модуль так же могут называть приложением. Как правило приложение это не один модуль а несколько модулей, объединенных между собой цепочкой зависимостей.

В модуле должны находится все файлы и ресурсы, которые необходимы для работы. Как правильно оформлять содержимое модуля можно посмотреть вот здесь

Если модули - это просто каталоги, то где платформа odoo находит их? Сама платформа ищет сканирует каталоги, которые указаны в параметре addons_path в файле конфигурации. В этот параметр не надо добавлять каталоги с самими модулями, в него надо добавлять каталоги, в которых находятся каталоги с модулями, например:

Подключение каталогов с модулями

На этом скриншоте мы видим, как подключаются каталоги с модулями. В правой части у нас в файле конфигурации указан путь к каталогу с модулями, а в левой дерево файловой системы контейнера.

Установка и обновление модуля

Чтобы все изменения, которые мы хотим привнести в систему odoo применились, нам необходимо установить модуль. Модуль так же можно обновить.

Сделать это можно как с помощью графического интерфейса:

Установка модуля

  1. Нажмите на главное меню
  2. Нажмите на пункт Apps
  3. Найдите нужный вам модуль и нажмите Activate

Дождитесь обновления страницы.

Как вы видели на первой картинке, наш модуль из демо проекта уже был установлен с самого начала. Добились мы этого другим способом.

При ведении разработки, или например автоматическом развертывании базы, устанавливать модули вручную не всегда удобно и для этого есть параметр командной строки -i, подробнее можно ознакомится тут. Если в этом параметре указать список имен модулей, то при запуске система попытается сама их установить. Обращаю ваше внимание на то, что вы работаете через менеджер разработки и он поддерживает только те параметры командной строки, которые указаны в документации. При разработке менеджера я решил, что каждый раз указывать при запуске списка модулей которые надо установить (инициализировать) это не очень удобно и я перенес этот список в файл конфигурации config.json где в параметре init_modules вы можете указать весь список, а при запуске системы достаточно указать параметр -i.

Чтобы обновить наш модуль first_module:

Обновление модуля

  1. В поиске введите его техническое имя
  2. Нажмите на три точки в правом верхнем углу плитки и выберите в появившемся меню пункт Upgrade

Таким образом запуститься процесс обновления модуля.

Так же вы можете сделать это с помощью параметра командной строки -u, его использование аналогично использованию параметра -i. В файле конфигурации указываете список модулей, который хотите обновить и при перезапуске системы он обновится.

В чем разница между установкой и обновлением?

  1. При установке имя модуля записывается в реестр системы (об этом напишу позже) и система уже будет знать об этом модуле
  2. Если модуль не установлен, то система будет игнорировать его python файлы при перезапуске. Т.е. когда вы устанавливаете модуль, потом вносите изменения в python файл, то при перезапуске система автоматически их подхватит. Такова особенность платформы.
  3. При установке модуля система будет игнорировать атрибут в xml-файлах как no_update и если в файле конфигурации параметр without_demo будет установлен как Falseсистема принудительно установит демо-данные модуля.
  4. При обновлении модуля система находит указанный модуль и обновляет все данные указанные в xml-файлах. Т.е. в момент обновления система парсит их и обновляет в базе данных все связанные с ними записи. (В связи с этим есть некоторые тонкости, расскажу об этом в статье об xml-файлах)
  5. При обновлении, все записи, которые находятся внутри тега с атрибутом no_update, буду проигнорированы и не обновлены.

Обсуждение

Обсудить, указать на ошибки и опечатки можно здесь