Перейти к содержимому

Поле Integer в Odoo: Полное руководство для разработчиков

Полное руководство по полю «Целое число» в модели данных Odoo: от практического применения в бизнес‑процессах до тонкостей технической настройки
6 марта 2026 г. от
Поле Integer в Odoo: Полное руководство для разработчиков
Dasolo
| Комментариев пока нет

Введение


Если вы когда‑либо указывали количество на заказе, считали дни открытия задачи или назначали приоритет лида — вы уже сталкивались с целочисленным полем в Odoo. Это одно из самых распространённых типов полей в системе: оно короткое, простое и повсюду, но зачастую его поведение недооценивают.


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


В этом материале объясняю, какие данные хранит целочисленное поле, как оно ведёт себя в интерфейсе и ORM Odoo, как добавить его через Studio или код, какие сценарии применения наиболее типичны и на что нужно обращать внимание на практике.

Что такое целочисленное поле в Odoo


В терминах базы данных такое поле хранит только целые числа — никаких дробных частей. На уровне PostgreSQL оно соответствует типу INTEGER (4‑байтный знаковый целый), то есть поддерживает диапазон примерно от −2 до +2 миллиардов, что обычно более чем достаточно для бизнес‑метрик.


С точки зрения пользователя это простое поле ввода для чисел в формах и столбец с числами в списках. Его логично использовать для показателей, которые считаются целыми: штуки товара, баллы, дни, порядковые номера — везде, где «половина» единицы бессмысленна.


Ниже — пример, как это обычно описывают при разработке модуля на Python:

from odoo import fields, models

class ProjectTask(models.Model):
    _inherit = 'project.task'

    estimated_hours = fields.Integer(
        string='Estimated Hours',
        default=0,
    )

Параметр string задаёт подпись в интерфейсе, а default — начальное значение для новых записей.


В Odoo Studio тип поля называется просто «Integer». Поля, созданные через Studio, получают префикс x_studio_, тогда как при создании в коде вы самостоятельно определяете техническое имя.

Как поле работает


При установке или обновлении модуля фреймворк автоматически добавляет соответствующий столбец в таблицу базы данных — ручные SQL‑миграции обычно не требуются.


На уровне ORM Odoo обеспечивает приведение типов: пустое целочисленное поле возвращает 0, а не None или False. Это важный момент — он отличает Integer от некоторых других типов, где отсутствие значения выражается иначе.


Ключевые атрибуты поля

Ниже — свойства целочисленного поля, которые чаще всего пригодятся при настройке:

  • string: метка поля, видимая пользователям.
  • default: значение по умолчанию для новых записей. Если не указано — по умолчанию 0.
  • required: делает поле обязательным. Учитывайте, что по умолчанию поле уже равно 0, поэтому флаг нужен, если вы хотите запретить сохранение нулевого значения.
  • readonly: запрещает редактирование поля в интерфейсе.
  • index: создаёт индекс в PostgreSQL для ускорения фильтрации и поиска по этому полю.
  • compute: привязывает метод Python для автоматического вычисления значения.
  • store: в паре с compute управляет тем, сохраняется ли вычисленное значение в базе или пересчитывается на лету.
  • copy: определяет, копируется ли значение при дублировании записи.
  • groups: ограничивает видимость поля для определённых пользовательских групп.

Отображение в представлениях

В формах поле выглядит как простое числовое поле; при отображении больших чисел Odoo автоматически добавляет разделители тысяч для удобочитаемости.


В списках числовые столбцы выравниваются по правому краю по привычке. В поисковых фильтрах по целочисленным полям доступны сравнения «равно», «больше», «меньше» и т.п.


Для изменения внешнего вида поля в представлениях можно применять виджеты: например, виджет priority превращает число в кликабельные звёздочки, а progressbar показывает значение как индикатор прогресса при наличии максимума.


Взаимодействие с ORM Odoo

Для разработчика работа с Integer проста: в Python это всегда int. Однако пустое поле возвращает 0, поэтому условия типа «если поле пусто» нужно писать с учётом того, что ноль и неустановленное значение выглядят одинаково.


Целые поля свободно используются в вычисляемых полях, в доменах для фильтрации и в автоматизациях по всей платформе.

Бизнес‑кейсы


Примеры практического применения


1. CRM: оценка лидов

Команды продаж часто ставят у лидов числовой приоритет — «оценка лида». Это обычное кастомное целочисленное поле в модели CRM, которое может заполняться руками или вычисляться автоматически по правилам (размер компании, бюджет, активность).

Такую оценку удобно сортировать и быстро отбирать самые перспективные контакты.


2. Продажи: минимальные количества заказа

В модулях Sales и Inventory целочисленные поля задают минимальные партии товара. Если установить минимум 10 штук, система запретит создать заказ с меньшим количеством, что экономит время на переписке с клиентом.


3. Склад: правила пополнения

Правила пополнения зависят от целочисленных полей minimum и maximum. Когда запас опускается ниже минимума, Odoo генерирует заявку на пополнение до заданного максимума — корректные значения помогают избежать как дефицита, так и излишних запасов.


4. Проекты: story‑points и оценки по времени

В Project для гибкой методологии команды часто добавляют поле для story points или оценки часов — это простой Integer, который видно в карточке задачи и который помогает оценивать загрузку команды.


5. Бухучёт: сроки платёжных условий в днях

В настройках условий оплаты количество дней указывается как целое. Значения вроде Net 30 или Net 60 напрямую влияют на расчёт даты оплаты счета, поэтому тут важна точность.

Создание и настройка целочисленного поля


Как добавить поле: два подхода


Есть два основных пути: безкодовое добавление через Odoo Studio и кодовая настройка через Python.

Через Odoo Studio

  1. Studio — встроенный инструмент для быстрой настройки интерфейса и добавления полей без программирования. Чтобы создать Integer через Studio:
  2. Откройте форму, в которую хотите добавить поле, и включите Studio в верхнем меню.
  3. Перетащите тип поля «Integer» из панели слева на форму.
  4. Задайте подпись поля, укажите, обязательно ли оно, и при необходимости значение по умолчанию.
  5. Сохраните изменения и выйдите из Studio.

Studio автоматически создаёт поле с префиксом x_studio_ и сохраняет его в ir.model.fields. Поле становится сразу доступным в формах и списках.


Через Python (для разработчиков)

Если нужен контроль и версионирование в коде, добавляют поле в модели в модуле на Python:


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    x_lead_score = fields.Integer(
        string='Lead Score',
        default=0,
        index=True,
        help='Score from 0 to 100 used to prioritize opportunities',
    )

После добавления кода выполните обновление модуля (odoo-bin -u your_module), чтобы ORM создал соответствующий столбец в базе.


Через XML‑RPC API

Если у вас нет прямого доступа к серверу или вы автоматизируете деплой, поле можно создать удалённо через XML‑RPC:


field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_lead_score',
        'field_description': 'Lead Score',
        'model_id': crm_lead_model_id,
        'ttype': 'integer',
        'state': 'manual',
    }]
)

Для целочисленного поля параметр ttype = 'integer', а state = 'manual' указывает, что это кастомное поле.


Вычисляемые целочисленные поля

Вычисляемые (computed) Integer‑поля полезны для автоматического подсчёта значений, например количества открытых задач в проекте.


class Project(models.Model):
    _inherit = 'project.project'

    open_task_count = fields.Integer(
        string='Open Tasks',
        compute='_compute_open_task_count',
        store=True,
    )

    def _compute_open_task_count(self):
        for project in self:
            project.open_task_count = self.env['project.task'].search_count([
                ('project_id', '=', project.id),
                ('stage_id.fold', '=', False),
            ])

Если указать store=True, значение сохраняется в базе, что позволяет фильтровать и сортировать по этому полю без постоянного пересчёта.

Рекомендации по использованию


Практические советы


Используйте Integer для счётчиков и целых величин

Применяйте Integer там, где значение должно быть целым. Для денег и измерений с возможными дробями лучше подходит Float или Monetary.


Задайте осмысленный default

По умолчанию поле равно 0. Подумайте, является ли ноль корректным значением в вашем бизнес‑контексте. Если ноль означает «не назначено», лучше отражать это отдельным флагом или логикой, чтобы не путать пустое и сознательно установленное значение.


Добавляйте индекс, если планируете фильтровать по полю

Если поле часто участвует в фильтрах или группировках, поставьте index=True. Индекс заметно ускорит запросы на больших таблицах, небольшой прирост дискового пространства и времени записи обычно оправдан.


Храните вычисляемые поля, если по ним фильтруют

Если вычисляемое Integer‑поле требуется в фильтрах и группировках, обязательно ставьте store=True. Без этого поле нельзя использовать в доменах и агрегатах эффективно.


Документируйте допустимые диапазоны

Если поле имеет смысловую шкалу (например, 0–100), укажите это в параметре help. Подсказка в интерфейсе избавит пользователей от догадок и ошибок.


Не храните внешние связи просто как ID

Если нужно ссылаться на другую запись, используйте Many2one, а не целочисленное поле с ID. Many2one даёт навигацию, каскадные правила и интеграцию с ORM; сырой ID хрупок и обходится стороной от фреймворка.

Типичные ошибки


Наиболее распространённые ошибки


Путать Integer и Float

Частая ошибка — выбрать Integer там, где возможны дроби. Если требуется ввести 1.5 или 0.25, Integer обрежет дробную часть и приведёт к потере данных. Для дробных значений используйте Float, для денежных — Monetary.


Считать, что ноль = отсутствие значения

Поскольку пустое целочисленное поле возвращает 0, нельзя отличить «не заполнено» от «введён ноль». Если это важно для бизнес‑логики, добавьте булевский флаг (например, has_score) или другой механизм обозначения статуса.


Не ставить индекс на часто фильтруемое поле

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


Использовать Integer для процентных значений, которые могут быть дробными

Хранение процентов как целых (например, 75 вместо 75.0) работает до момента, когда нужна половинчатая точность. Если вероятность появления дробных процентов есть — сразу используйте Float.


Забыть о store=True для полей, по которым фильтруют

Очень распространённая ошибка: вычисляемое поле без store=True нельзя использовать в доменах, автоматизациях и группировках. Подумайте заранее, где поле будет применяться.

Заключение


Целочисленное поле — базовый и вездесущий элемент модели данных Odoo. На первый взгляд оно простое, но детали поведения (например, возвращаемое 0 для пустых полей и необходимость store=True для фильтрации вычисляемых значений) влияют на архитектуру и удобство поддержки системы.


Независимо от того, настраиваете ли вы Odoo для отдела продаж, пишете модуль или настраиваете правила пополнения склада, понимание, когда использовать Integer, а когда Float/Monetary, помогает сделать реализацию надёжной и легко поддерживаемой.


Если вы проектируете кастомизацию Odoo и хотите, чтобы модель данных с самого начала была спроектирована правильно, такие базовые знания окупаются в течение всего жизненного цикла проекта.

Работайте с экспертом по Odoo


В компании Dasolo мы помогаем предприятиям внедрять, настраивать и оптимизировать Odoo во всех модулях и отраслях. Мы проектируем корректные модели данных, создаём кастомные поля и процессы, а также интегрируем Odoo с внешними системами через API.


Если у вас есть вопросы по настройке Odoo или вы хотите обсудить проект, свяжитесь с нашей командой. Мы будем рады помочь.

Поле Integer в Odoo: Полное руководство для разработчиков
Dasolo 6 марта 2026 г.
Поделиться этой записью
Войти оставить комментарий