Перейти к содержанию

Настройки видов без кода

Что в списке и на форме можно поменять из интерфейса, не трогая разметку вью. Настройки лежат в базе (модуль view_settings), поэтому обновление кода их не затирает.

Список и канбан настраивает каждый пользователь для себя через меню «⋮» справа в шапке вида. Форму настраивает администратор настроек в режиме студии — иконка в шапке, см. Студия.

Колонки списка, поля карточки канбана Поля формы
Где «⋮ → Колонки» в списке, «⋮ → Поля карточки» в канбане режим студии (иконка в шапке на форме)
Кто каждый пользователь, для себя администратор настроек (суперпользователь или роль system_admin), для всех
Модель column_settings — запись на пользователя, модель и вид (view_type: list, kanban) form_settings — одна запись на модель
Ремонтный экран Прочее → Настройки колонок Прочее → Настройки форм

Колонки списка и поля карточки

Галочка — поле показано, стрелки — порядок, «По умолчанию» — поля вью. У колонок-связей (One2many, Many2many) в списке шестерёнка задаёт виджет (счётчик, «есть/нет», текст) и фильтр на связанные записи — тем же редактором условий, что у фильтра списка. В карточке канбана значения рисуются как в ячейках списка: флажок, дата, у связи — имя записи, у связи-списка — число записей.

Поля формы

Общие настройки формы (form_settings) — обязательные поля и зона «Дополнительно»: поля, которых нет в разметке, её место и сетка. Правятся в режиме студии, запись на сервер — сразу по каждому действию.

  • Место зоны (extra_placement): под разметкой, колонкой справа (сворачивается стрелкой; на узкой форме — под разметкой) или последней вкладкой «Дополнительно» в FormTabs формы. У формы без вкладок «вкладка» остаётся под разметкой.
  • Сетка (extra_columns × extra_rows): обычный CSS grid, по умолчанию 1 колонка и сколько угодно строк — как прежний список полей. Строки можно ограничить числом.
  • Поля зоны (extra_fields) — клетки {"name", "x", "y", "w", "h", "widget"}: колонка и строка левого верхнего угла, размер поля в клетках и необязательный вид поля (charUrl — строка-ссылка с иконкой перехода; нет — по типу поля). В режиме студии поле бросают в пустую клетку (из панели или из самой зоны); бросок на другое поле меняет их местами, если оно влезает на прежнее место. Размер — в свойствах поля. Крестик убирает поле с формы. Поле без места (или не влезшее после уменьшения сетки) встаёт в первую свободную клетку; сохранённое место при этом не теряется — вернули колонки, поле вернулось. На узком экране поля зоны идут в одну колонку по строкам.
  • Обязательность — в свойствах выбранного поля и во вкладке «Поля формы» для полей разметки. Обязательное поле вне разметки форма показывает в «Дополнительно» сама.

Обязательность — уровня интерфейса, как Required у поля в Odoo Studio: форма ставит звёздочку и не даёт сохранить пустое, а API /auto и код (входящие сообщения, импорт из Excel, крон) её не проверяют — иначе автосоздание партнёра из входящего без ИНН падало бы.

Поля-таблицы (One2many, Many2many) не настраиваются: без разметки колонок форма их не нарисует, бэкенд такие имена отклоняет (FORM_SETTING_UNKNOWN_FIELD). Подпись дополнительного поля — перевод модуля <модель>:fields.<имя>, иначе подпись из модели (string у поля), иначе техническое имя.

Код — модуль студии fara_studio: папка zone/ — ExtraFieldsDefault.tsx (поля зоны вне режима студии), zoneGrid.ts (раскладка по клеткам, обмен, проверки), ExtraGrid.tsx (сетка), ZoneLayout.tsx (где стоит зона; вкладка — через FormTabsExtraContext ядра), ExtraZoneFrame.tsx (рамка по месту); useFormSettings.ts (кеш настроек, прогревается при старте; без установленной студии не грузится), StudioFormFields.tsx (поля зоны в запрос записи — provide:FormFields), StudioExtraFields.tsx (зона вокруг разметки — через wrap:Form); бэкенд — модель студии studio/models/form_setting.py; редактор — модуль fara_studio.