Наследование
Оглавление
Основная информация
В объектно-ориентированном программировании существует такой терми как наследование. Как правило данный термин применяется в отношении классов ООП, но в случае 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
Обсуждение
Обсудить можно здесь

