Введение
В Odoo любая информация бизнеса — от счетов до задач — представлена как запись в модели. Модель определяет, какие поля есть у этих записей, как они связаны между собой и как данные сохраняются в базе, поэтому понимание моделей — это базовая грамотность при работе с Odoo.
Знание моделей важно и для консультантов, и для разработчиков: именно через модели реализуется структура данных, связи между объектами и бизнес-логика. В Odoo все модели следуют единым принципам, что позволяет предсказуемо настраивать и расширять систему.
В этой статье мы разбираем одну из ключевых моделей платформы — project.project. Если вы настраиваете проекты, пишете кастомные модули или интегрируете внешние сервисы, рано или поздно вам придётся работать с этой моделью.
Что такое модель project.project
Модель project.project — это «контейнер» для проекта в Odoo: она хранит общие настройки проекта, метаданные и привязки к задачам, вехам и участникам команды. Каждый проект в системе — это отдельная запись этой модели.
На практическом уровне Project (приложение «Проекты») оперирует записями project.project: при создании проекта создаётся record этой модели, а задачи связываются с ним через поле task_ids. Сам проект задаёт этапы, состав команды и правила видимости.
Определение модели находится в модуле project, но другие модули дополняют её через наследование: модуль Sale — для учёта выставления счетов к проектам, Timesheet — для учёта рабочего времени, Project Planning — для диаграмм Ганта. Такой подход позволяет добавлять нужный функционал, не ломая основу.
Важно различать роль project.project и project.task: проект хранит общие настройки и структуру, задачи — это единичные рабочие элементы. Взаимодействие обеих моделей формирует типичный сценарий управления проектами в Odoo.
Ключевые поля в модели
Ниже перечислены основные поля модели project.project — знание их назначения поможет эффективно конфигурировать проекты и интеграции.
1. name
Тип: Char. Название проекта — главный читабельный идентификатор записи, отображается в списках, карточках и меню.
2. create_date
Тип: Datetime. Дата и время создания записи. Заполняется автоматически, полезно для аудита и отчётности.
3. write_date
Тип: Datetime. Дата и время последнего изменения. Также управляется системой, помогает отслеживать актуальность данных.
4. active
Тип: Boolean. Флаг архивирования — при false проект скрывается из стандартных видов, но не удаляется физически.
5. sequence
Тип: Integer. Порядок отображения при сортировке — меньшие значения выводятся выше.
6. color
Тип: Integer. Индекс цвета для визуального разделения проектов в канбане и списках.
7. user_id
Тип: Many2one (res.users). Менеджер проекта — пользователь, ответственный за проект и часто используемый как дефолтный исполнитель задач.
8. company_id
Тип: Many2one (res.company). В мультикомпании указывает, к какой компании относится проект.
9. partner_id
Тип: Many2one (res.partner). Клиент или контрагент проекта — служит для биллинга и аналитики.
10. description
Тип: Html. Описание проекта: можно форматировать текст, добавлять ссылки и заметки для команды или клиента.
11. date_start
Тип: Date. Дата начала проекта — важна для планирования и сроков.
12. date
Тип: Date. Дата окончания или дедлайн проекта — используется для контроля сроков.
13. task_ids
Тип: One2many (project.task). Список задач проекта — основная связь между проектом и задачами.
14. task_count
Тип: Integer. Число задач в проекте — вычисляемое поле, созданное на основе task_ids, удобно для фильтров и дашбордов.
15. type_ids
Тип: Many2many (project.task.type). Перечень этапов/статусов для задач проекта — определяет workflow (например: «Новые», «В работе», «Готово»).
16. tag_ids
Тип: Many2many (project.tags). Теги для категоризации проектов — помогают фильтрации и отчётам.
17. privacy_visibility
Тип: Selection. Настройка видимости проекта: приватный для приглашённых внутренних пользователей, доступный для всех сотрудников или публичный для приглашённых по порталу и внутренних пользователей.
18. collaborator_ids
Тип: One2many (project.collaborator). Участники проекта — кто может работать над задачами и получать уведомления.
19. favorite_user_ids
Тип: Many2many (res.users). Пользователи, добавившие проект в избранное — быстрый доступ в интерфейсе.
20. allow_task_dependencies
Тип: Boolean. Включает зависимости между задачами (предшественник/последователь) — полезно для планирования и графиков выполнения.
21. allow_milestones
Тип: Boolean. Включает поддержку вех в проекте — вехи служат маркерами ключевых результатов.
22. milestone_ids
Тип: One2many (project.milestone). Список вех проекта — для отслеживания контрольных точек.
23. rating_active
Тип: Boolean. Разрешает оценивать проект клиентами — инструмент обратной связи.
24. task_properties_definition
Тип: Text (JSON). Определение дополнительных свойств задач в формате JSON — позволяет добавлять кастомные поля на уровне проекта.
25. access_url
Тип: Char. Ссылка для доступа клиентов через портал — удобна для совместной работы с заказчиком.
26. access_token
Тип: Char. Токен безопасности для портального доступа — ограничивает просмотр проекта только по защищённой ссылке.
27. alias_id
Тип: Many2one (mail.alias). Почтовый алиас проекта: письма на этот адрес могут автоматически создавать задачи.
28. activity_ids
Тип: One2many (mail.activity). Запланированные активности по проекту — напоминания и задачи для следования.
29. activity_state
Тип: Selection. Сводное состояние активности: «Сегодня», «Просрочено», «Запланировано» — вычисляется по activity_ids.
30. activity_date_deadline
Тип: Date. Дата ближайшей запланированной активности — помогает в планировании и напоминаниях.
31. message_ids
Тип: One2many (mail.message). Сообщения в чёттере проекта — история коммуникаций и обсуждений.
32. message_follower_ids
Тип: One2many (mail.followers). Подписчики проекта — получают уведомления о событиях и обновлениях.
33. create_uid
Тип: Many2one (res.users). Кто создал запись — автоматически проставляется системой.
34. write_uid
Тип: Many2one (res.users). Кто последний редактировал запись — автоматически проставляется системой.
Как модель применяется в бизнес-процессах
1. Создание и управление проектом
Когда менеджер или менеджер по продажам создаёт проект, он задаёт название, ответственного, даты и уровень доступа. Эти параметры сохраняются в записи project.project, после чего в проект начинают добавлять задачи и распределять обязанности.
2. Работа с рабочим процессом задач
Задачи переходят между этапами, заданными в type_ids, менеджер распределяет исполнителей среди collaborator_ids. Проект служит источником настроек workflow и состава команды.
3. Портал для клиента
Если в настройках стоит доступ через портал, клиент по ссылке access_url (с токеном access_token) может просматривать ход работ, задачи и вехи — удобно при совместных проектах с внешними заказчиками.
4. Учёт времени и биллинг
С модулем Timesheet проект связывается с учётом рабочего времени, а с модулем Sale — с выставлением счетов: partner_id связывает проект с клиентом, что позволяет привязывать время и стоимость к конкретным заказам.
5. Почтовая интеграция
Письма, отправленные на почтовый алиас проекта, автоматически создают задачи. Поле alias_id устанавливает связь между проектом и почтовым адресом, упрощая регистрацию рабочих запросов из почты.
Как разработчики расширяют модель
Разработчики расширяют project.project через стандарты Odoo — в первую очередь через механизмы наследования модели.
Наследование модели
В коде используют _inherit = 'project.project' чтобы расширить модель: добавить поля, переопределить методы или ввести ограничения. Это позволяет держать изменения в отдельном модуле и сохранять совместимость с обновлениями платформы.
Добавление полей
В расширении определяют новые поля: Char, Many2one, Boolean, Integer, Text, Selection и т.д. В мультикомпании учитывайте необходимость company-dependent полей для корректного поведения.
Расширения на Python
Переопределяйте методы create, write или unlink для добавления логики, не забывая вызывать super(), чтобы не нарушить базовую функциональность и зависимости вычисляемых полей.
Odoo Studio
Studio позволяет быстро добавлять поля и формы без кода — удобно для прототипов и простых кастомизаций. Для масштабируемых и обновляемых решений предпочтительнее писать полноценный модуль.
Рекомендации по использованию
- Назначайте user_id для ответственного менеджера — это упрощает контроль и разграничение ответственности.
- Настраивайте type_ids индивидуально для каждого проекта, чтобы этапы соответствовали реальному процессу вашей команды.
- Правильно настраивайте privacy_visibility: приватный проект по умолчанию ограничивает доступ только назначенным участникам и администраторам.
- При интеграции через API используйте XML-RPC или JSON-RPC: модель project.project доступна через API, но важно корректно маппить внешние идентификаторы и права доступа.
- Для кастомных полей придерживайтесь префиксов x_ или своего модуля, чтобы избежать конфликтов с будущими версиями Odoo.
Частые ошибки
- Создание задач без привязки к проекту. Каждая задача должна иметь project_id — иначе теряется контекст и многие механизмы не сработают.
- Забыть задать type_ids. Без этапов задачи не смогут корректно переходить по workflow, что нарушит процесс управления.
- Открыть публичный доступ (privacy_visibility) там, где нужен приватный режим — риск утечки внутренних данных.
- Переопределение критических методов без вызова super(). Это часто ломает работу других модулей и осложняет апгрейды.
- Добавление обязательных полей без значений по умолчанию. Существующие записи будут невалидны при обновлении модуля.
Заключение
Модель project.project — ядро управления проектами в Odoo: она хранит настройки, этапы и структуру команды. Понимание её полей и способов расширения позволит правильно настраивать систему и интегрировать внешние процессы.
Будь вы консультантом, внедряющим проекты, или разработчиком, пишущим модули, хорошее знание project.project сэкономит время и уменьшит количество ошибок.
Нужна помощь с внедрением Odoo?
Dasolo помогает компаниям внедрять, настраивать и оптимизировать Odoo: мы делаем интеграции через API и пишем кастомные решения, основанные на глубоком понимании архитектуры данных Odoo и ключевых моделей вроде project.project.
Если вам нужна помощь с внедрением Odoo, разработкой модулей или интеграциями — мы готовы подключиться и реализовать решение. Запишитесь на демо чтобы обсудить ваш проект.