Представление модели в Odoo - m3dbedb/odoo GitHub Wiki

Модель определяется в классе Питона. Модули дополняются так же с помощью классов, но используя особенный механизм наследования Odoo.

Для расширения существующей модели используется класси Питона с параметром _inherit. Это говорит о том, какая модель будет улучшена. Новый класс наследует все возможности родительской модели Odoo остаётся только описать желаемые изменения.

Фактически модели Odoo существуют вне отдельного модуля Питона, в общем реестре. Этот реестр может быть доступен из методов модели используя self.env[<имя модели>]. К примеру, чтобы получить ссылку на объект, представляющий модель res.partner, напишем self.env['res.partner'].

Чтобы изменить модель Odoo возьмём ссылку на её класс в реестре Оды и произведём местные изменения класса. Это значит, что изменения так же будут доступны везде, где будет использоваться эта новая модель.

Во время запуска сервера Odoo, последовательность загрузки модулей относительна - изменения произведённые отдельным модулем видимы только модулям, загружаемым после него. Важно правильно установить зависимости и убедиться что используемые модули указаны в числе зависимостей.

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

Добавление в существующую модель tdo.task полей date_deadline (срок решения задачи) и user_id (ответственный) с помощью наследования.

# -*- coding: utf-8 -*-
from odoo import models, fields, api # делаем доступными новому классу объектов типа `модели` и `поля`
class TTask(models.Model): # название нового класса и тип модуля. Название класса малозначительно
    _inherit = 'tdo.task' # указываем атрибут _name наследуемой модели, именно по этому полю в Оде
    # происходит обращение к другим модулям
    user_id = fields.Many2one('res.users', 'Ответственный')
    date_deadline = fields.Date('Срок исполнения')
    # атрибут _name у нового класса не указываем, он берётся у наследуемой модели
⚠️ **GitHub.com Fallback** ⚠️