Наследование
Оглавление
Основная информация
В объектно-ориентированном программировании существует такой терми как наследование. Как правило данный термин применяется в отношении классов ООП, но в случае odoo он имеет схожий смысл, но есть некоторые отличия.
Если говорят о наследовании в контексте odoo то имеется ввиду следующие: Наследование моделей, а так же подразумевается, что эти изменения будут отражены в представлении через одноименный механизм [наследования представлений](наследование моделей). А так же для наследование javascript - в данном случае это старый js фреймворк, для нового вот
Как вы можете видеть, поведение всех элементов системы может быть изменено с помощью наследования. Такой инструмент позволяет использовать уже существующий код невероятно эффективно, т.к. появляется возможность использовать доступные модули в собственных целях и добавлять только действительно отсутствующие элементы.
Наследование моделей
Наследование моделей бывает 3-х типов:
- Расширение - Изменение существующей модели. Наиболее часто используемый механизм для добавления дополнительного функционала в уже существующие модули. Модифицирует поведение исходной модели
- Классическое наследование. Используется значительно реже. Создает отдельную модель со своей таблицей при этом обладает всеми полями и методами наследуемой модели.
- Делегирование. Позволяет создавать модель на основании наследуемой, но при этом не создается ее копия, а используются ссылки на родительский объект. Работает медленнее.
Модификация существующего модуля
Подготовка
Для того, чтобы использовать следующий пример, вам необходимо переключить текущий разрабатываемый проект на другую ветку.
Вот ее имя - 16.0-inherit-sale-order
Затем удалите текущую базу и создайте новую.
Убедитесь, что у вас не осталось вкладок со старыми сессиями
Затем откройте файл config.json
и в ключах init_modules
и update_modules
добавьте имя нового модуля inherit_sale_order
:
Запустите менеджер с флагами -d имя_базы -i -u
, и он сам создаст новую базу с указанными именем
Добавление поля в модель
Наконец мы приступаем к модификации уже существующих модулей. Как правило, это будет основная часть работы, т.к. даже базовая система имеет в себе около 500 мб уже готовых модулей. Поверьте это очень много, и писать с нуля все - верх глупости. Итак, давайте наконец взглянем на пример:
- Наследуем уже существующую модель, с помощью ключевого слова
_inherit
и добавляем дополнительное поле - Создаем запись, которая будет наследовать уже готовое представление смотрите на поле с именем
inherit_id
, затем с помощью директивыxpath
находим элемент и с помощью атрибутаposition
указываем куда будет пристыкован новый узел. В нашем случае это созданное нами поле с именемadditional_field
- После того, как мы перезагрузим систему с обновлением модуля (с флагами
-d имя_базы -i -u
), мы должны будем увидеть что целевой модели, в нашем случае этоsale.order
будет добавлено дополнительное поле.
Для того, чтобы найти этот объект надо в главном меню открыть пункт Sale
и кликнуть по любому документу в списке.
Задания для самостоятельного повторения:
- Создайте свое поле самостоятельно и выведите его на форму для модели
sale.order
Обсуждение
Обсудить можно здесь