Наследование

Оглавление

Основная информация

В объектно-ориентированном программировании существует такой терми как наследование. Как правило данный термин применяется в отношении классов ООП, но в случае odoo он имеет схожий смысл, но есть некоторые отличия.

Если говорят о наследовании в контексте odoo то имеется ввиду следующие: Наследование моделей, а так же подразумевается, что эти изменения будут отражены в представлении через одноименный механизм [наследования представлений](наследование моделей). А так же для наследование javascript - в данном случае это старый js фреймворк, для нового вот

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

Наследование моделей

Наследование моделей бывает 3-х типов:

  1. Расширение - Изменение существующей модели. Наиболее часто используемый механизм для добавления дополнительного функционала в уже существующие модули. Модифицирует поведение исходной модели
  2. Классическое наследование. Используется значительно реже. Создает отдельную модель со своей таблицей при этом обладает всеми полями и методами наследуемой модели.
  3. Делегирование. Позволяет создавать модель на основании наследуемой, но при этом не создается ее копия, а используются ссылки на родительский объект. Работает медленнее.

Модификация существующего модуля

Подготовка

Для того, чтобы использовать следующий пример, вам необходимо переключить текущий разрабатываемый проект на другую ветку.

Вот ее имя - 16.0-inherit-sale-order

Затем удалите текущую базу и создайте новую.

Убедитесь, что у вас не осталось вкладок со старыми сессиями

Затем откройте файл config.json и в ключах init_modules и update_modules добавьте имя нового модуля inherit_sale_order:

config.json

Запустите менеджер с флагами -d имя_базы -i -u, и он сам создаст новую базу с указанными именем

Добавление поля в модель

Наконец мы приступаем к модификации уже существующих модулей. Как правило, это будет основная часть работы, т.к. даже базовая система имеет в себе около 500 мб уже готовых модулей. Поверьте это очень много, и писать с нуля все - верх глупости. Итак, давайте наконец взглянем на пример:

config.json

  1. Наследуем уже существующую модель, с помощью ключевого слова _inherit и добавляем дополнительное поле
  2. Создаем запись, которая будет наследовать уже готовое представление смотрите на поле с именем inherit_id, затем с помощью директивы xpath находим элемент и с помощью атрибута position указываем куда будет пристыкован новый узел. В нашем случае это созданное нами поле с именем additional_field
  3. После того, как мы перезагрузим систему с обновлением модуля (с флагами -d имя_базы -i -u), мы должны будем увидеть что целевой модели, в нашем случае это sale.order будет добавлено дополнительное поле.

Для того, чтобы найти этот объект надо в главном меню открыть пункт Sale и кликнуть по любому документу в списке.

Задания для самостоятельного повторения:

  1. Создайте свое поле самостоятельно и выведите его на форму для модели sale.order

Обсуждение

Обсудить можно здесь