Настройки видов без кода¶
Что в списке и на форме можно поменять из интерфейса, не трогая разметку вью. Настройки лежат в базе (модуль 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.