Введение
Поле Text — это универсальный инструмент в Odoo для свободного текста. Когда сотрудники пишут заметку, описывают товар или оставляют внутренний комментарий к заказу — велика вероятность, что они используют именно многострочное текстовое поле.
На экране оно выглядит как обычный многолинейный textarea, но понимание его поведения в рамках модели данных Odoo и ORM важно для грамотного проектирования форм, разработки модулей и настройки полей через Odoo Studio.
В этой статье мы разберём, какие данные хранит Text, как поле себя ведёт в интерфейсе и в ORM, где его целесообразно применять в бизнес-процессах, как создать или изменить такое поле и какие практики помогут избежать проблем.
Что такое поле Text в Odoo
В ORM Odoo поле описывается как fields.Text — это место для хранения произвольного многострочного plain text. В PostgreSQL оно соответствует колонке типа TEXT и не имеет жёсткого ограничения по длине: от короткой фразы до длинного абзаца — всё сохраняется корректно.
In forms, it renders as a resizable <textarea> element. In list views, it appears as truncated plain text. In search views, it supports text-based filtering just like the Char field.
Ниже — пример минимального определения Text-поля в модуле на Python:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Internal Notes',
translate=False,
)
В Odoo Studio этот тип называется «Multi-Line Text». Поля, созданные через Studio, получают префикс x_studio_ в техническом имени. Если вы добавляете поле через код или API, техническое имя задаётся вами вручную.
Чем Text отличается от Char и Html
В Odoo есть три типа полей для текста — понимать различия между ними важно, чтобы не ошибиться при проектировании модели данных:
- Char: однострочное поле для коротких значений — имён, кодов, идентификаторов. Можно задавать ограничение длины.
- Text: многострочное поле для заметок, описаний и свободного текста. Хранит чистый текст без разметки.
- Html: многострочный редактор с форматированием. Подходит для контента с разметкой — шаблонов писем, описаний на сайте, страниц. Хранит HTML.
Text как раз занимает среднюю позицию: даёт пространство для нескольких строк, но не добавляет сложности HTML. Для внутренних комментариев и простых описаний это чаще всего лучший выбор.
Как это поле работает
При добавлении fields.Text в модель Odoo автоматически создаёт соответствующую колонку TEXT в базе при установке или обновлении модуля — вам не нужно писать SQL-миграции вручную.
В отличие от Char, Text не имеет параметра size: база данных не накладывает ограничение на количество символов. Это спроектировано специально — такие поля предназначены для свободного текста, где предварительное ограничение длины обычно нецелесообразно.
Ключевые атрибуты поля Text
Основные свойства Text-поля в Odoo, которые важно учитывать при настройке:
- translate — если True, значение можно переводить для каждой языковой версии. Полезно для мультиязычных инстансов, где содержание меняется в зависимости от языка пользователя.
- required — делает поле обязательным на уровне интерфейса и ORM; без него запись нельзя сохранить.
- default — задаёт значение по умолчанию при создании записи; может быть статичной строкой или вызываемым методом.
- compute — связывает поле с вычисляемым методом на Python, генерирующим содержимое динамически.
- store — совместно с compute определяет, сохраняется ли вычисленное значение в базе. При store=True значение становится доступным для поиска и отчётов.
- copy — контролирует, копируется ли значение при дублировании записи. По умолчанию True; для контекстных заметок имеет смысл ставить False.
- index — редко используется для Text, поскольку полнотекстовый поиск PostgreSQL работает иначе, чем обычный B-tree индекс для Char. Для поискового контента лучше полагаться на full-text или стандартные фильтры Odoo.
Как поле отображается в представлениях
In form views, the Text field renders as a <textarea> that users can resize vertically. In list views, content is truncated to fit the column width. In search views, it supports text-based search filters out of the box once you add it to the search view definition.
В отличие от Html, Text не загружает WYSIWYG-редактор: пользователь видит чистый textarea без панелей форматирования, и то, что он ввёл, сохраняется «как есть», включая переносы строк.
Взаимодействие с ORM Odoo
Для разработчика чтение и запись Text-полей просты: значение доступно на объекте записи, ORM сам сохраняет данные. Переносы строк сохраняются без изменений. Text не проходит автоматическую HTML-санацию — в отличие от Html-полей, где Odoo фильтрует разметку для защиты от XSS.
Бизнес-кейсы
Где Text чаще всего используется в реальных процессах — пять практических примеров.
Продажи: внутренние заметки к заказу
Поле note на заказе и internal_note в кастомных реализациях — это Text-поля. Менеджеры продаж фиксируют там инструкции по доставке, требования к упаковке или предпочтения клиента, которые не нужны на печатных документах, но важны для операционной команды.
Склад: внутренние примечания к товару
На карточке товара есть вкладка «Заметки» с Text-полем для внутренних комментариев. Сотрудники склада оставляют там инструкции по хранению, пометки о хрупкости или данные от поставщика — информация остаётся в системе, но не выводится на сайт или клиентские документы.
Закупки: условия поставщика и инструкции по доставке
В заказе на покупку Text-поле для заметок поставщика помогает зафиксировать договорённости или ограничения, подтверждённые вне системы. Это снижает риск недопониманий при приёмке товара, когда исходные переписки уже не под рукой.
CRM: сводки по возможностям и заметки встреч
Возможности продаж часто дополняют Text-полем для заметок с итогами встреч, возражениями клиента или контекстом сделки. В отличие от сообщений в chatter, выделенное поле заметок даёт структурированное и быстро читаемое содержание, если нужно подхватить лид другим сотрудникам.
HR: комментарии по сотрудникам и кандидатам
HR используют Text для заметок по интервью, адаптации или оценке работы — поле остаётся в карточке сотрудника или кандидата. Это удобно, компактно и легче включается в отчёты, чем создание отдельной модели для простых текстовых комментариев.
Создание и настройка поля Text
Три способа добавить Text-поле в модель Odoo — в зависимости от вашей роли и окружения.
Через Odoo Studio (без кода)
Odoo Studio — самый простой путь для бизнес-пользователей и консультантов, которые не хотят писать код. Как добавить Text-поле без разработки:
- Откройте Odoo Studio в приложении Studio (если оно установлено).
- Перейдите к форме, где нужно добавить поле.
- Перетащите элемент «Multi-Line Text» из панели Studio на форму.
- Задайте метку, обязательность и значение по умолчанию в свойствах поля.
- Сохраните изменения и закройте Studio.
Studio автоматически создаёт поле и обновляет представление. Поле получает префикс x_studio_ и сразу становится доступным без миграций или перезагрузки сервера.
Через Python в кастомном модуле
Если требуется контроль версий и развёртывание между окружениями, поле стоит определять в коде — стандартная практика разработки Odoo:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_client_notes = fields.Text(
string='Client Notes',
translate=False,
copy=False,
)
После добавления поля в модель его нужно вставить в XML-представление, чтобы оно стало видимым в интерфейсе. При установке или обновлении модуля Odoo создаст колонку в базе автоматически — это рекомендуемый подход для продакшен-настроек.
Через XML-RPC API
Если вы программно управляете конфигурацией Odoo (скрипты развёртывания, удалённые настройки), поля можно создавать через XML-RPC API:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_client_notes',
'field_description': 'Client Notes',
'model_id': model_id,
'ttype': 'text',
'state': 'manual',
'translate': False,
'copy': False,
}]
)
Параметр ttype: text указывает Odoo создать Text-поле. Значение state: manual сигнализирует, что поле создано вне модуля (например, через Studio или API), что корректно для внешних конфигураций.
Рекомендации по использованию
Практические правила использования Text
1) Используйте Text только когда действительно нужен многострочный ввод. Частая ошибка — брать Text ради удобства, хотя поле держит простую однострочную информацию (имя, код, номер). Для таких значений лучше Char: форма будет компактнее, модель данных — понятнее.
2) Выбирайте Html, если важна разметка. Когда требуется список, выделение текста, ссылки или иной формат — Text не справится. Пользователи, вставляющие форматированный контент в plain textarea, получат плоский текст без форматирования.
3) Включайте translate для клиент-ориентированного текста. Если Text отображается в документах для клиентов или на сайте, ставьте translate=True, чтобы переводчики могли добавить варианты для разных языков. Для внутренних оперативных заметок перевод обычно не нужен.
4) Ставьте copy=False, если заметки не должны переноситься при дубликате. По умолчанию Text копируется при дублировании записи; для контекстных комментариев это зачастую нежелательно.
5) Используйте compute вместе с store=True для автогенерируемых сводок. Поле можно вычислять в Python, сохранять результат в базе и делать его доступным для поиска и отчётов — удобный приём для динамических кратких резюме внутри записи.
Ошибки выбора типа поля — примеры из практики
Выбор Text вместо Html: если поле предназначено для вывода на сайт или в форматированный PDF, Text уничтожит всю разметку. Контент с пунктами, жирным шрифтом или ссылками превратится в простой текст — подумайте заранее, нужен ли форматированный вывод.
Выбор Text вместо Char: для коротких однострочных значений Text делает форму громоздкой. Номер отслеживания, код варианта — это про Char, а не про многострочный ввод.
Забыли translate для мультиязычного контента: на интернациональных инстансах отсутствие translate=True для пользовательского Text-поля означает, что все видят одно и то же значение независимо от языка. Исправление после наполнения данными требует аккуратной миграции, чтобы не потерять переводы.
Распространённые ошибки
Хранение структурированных данных в Text: складывать JSON, разделённые символом строки или другие структурированные форматы в Text — плохая идея. Для структурированных данных лучше использовать правильные поля Odoo (Selection, Many2one или отдельную связанную модель).
Не добавили поле в поисковое представление: если важная текстовая информация не присутствует в search view, пользователи не смогут фильтровать записи по ключевым словам и будут листать списки вручную. Добавляйте Text-поля в поисковую форму, если по ним потребуется поиск.
Поле Text кажется простым, но оно — важный кирпичик модели данных Odoo.
Выбор между Char, Text и Html — одна из первых архитектурных задач в проекте по настройке Odoo. Правильное решение сразу экономит время и снижает риск ошибок и технического долга.
Независимо от способа добавления — через Studio, модуль на Python или API — описанные принципы помогут выбрать и настроить поле правильно для конкретного сценария.
Хорошая модель данных в Odoo складывается из множества мелких, но продуманных решений. Выбор подходящего типа поля для каждого фрагмента информации — один из таких шагов; при верном применении Text остаётся надёжным и гибким инструментом для незструктурированного содержимого.
О Dasolo: мы помогаем компаниям внедрять, настраивать и оптимизировать Odoo по всей организации. Если нужна помощь с проектированием модели данных, созданием кастомных полей и рабочих процессов или развёртыванием Odoo «под ключ», мы готовы подключиться.
Свяжитесь с нами
и обсудим ваш Odoo-проект.
Если текстовое поле содержит важные сведения, но не включено в представление поиска, его нельзя отфильтровать через строку поиска списка. В результате пользователи листают записи в поисках нужной информации вместо того, чтобы ввести ключевое слово. Если вы ожидаете, что по содержимому текстового поля будут искать — добавьте его в определение поискового представления при создании поля.
Вывод
На первый взгляд текстовое поле в Odoo кажется простой деталью, пока не начнёшь серьёзно проектировать формы и логические модели данных — тогда его значение и особенности становятся очевидны.
Выбор между Char, Text и Html — одно из первых решений в любом проекте по кастомизации Odoo. Правильный выбор на старте экономит часы работы и предотвращает проблемы с качеством данных в будущем.
Добавляете поле заметок через Odoo Studio, прописываете его в Python-модуле или создаёте через API — рекомендации из этого руководства помогут принять верное решение и корректно настроить поле под конкретную задачу.
Хорошо продуманная модель данных Odoo складывается из множества небольших решений. Подбор подходящего типа поля для каждого фрагмента информации — одно из ключевых, и текстовое поле при верном применении даёт гибкость для хранения свободного контента, который не укладывается в строго структурированные поля.
В Dasolo мы помогаем компаниям внедрять, адаптировать и оптимизировать Odoo во всех отделах. Нужна помощь с продуманной моделью данных, созданием кастомных полей и процессов или развёртыванием Odoo «с нуля» — наша команда готова взять проект на себя. Свяжитесь с нами — обсудим ваш проект на Odoo.