Представлення

Представлення - це те, що визначає, як записи мають відображатися кінцевим користувачам. Вони вказані в XML, що означає, що їх можна редагувати незалежно від моделей, які вони представляють. Вони гнучкі та забезпечують високий рівень налаштування екранів, якими вони керують. Існують різні види поглядів. Кожен з них представляє режим візуалізації: форма, список, канбан тощо.

Основна структура

Базові представлення зазвичай мають спільну структуру, визначену нижче. Заповнювачі позначаються великими літерами.

<record id="MODEL_view_TYPE" model="ir.ui.view">
  <field name="name">NAME</field>
  <field name="model">MODEL</field>
  <field name="arch" type="xml">
    <VIEW_TYPE>
      <VIEW_SPECIFICATIONS/>
    </VIEW_TYPE>
  </field>
</record>

Поля

Об’єкти представлення відображають кілька полів. Вони необов’язкові, якщо не зазначено інше.

  • name (обов’язковий) - Char

    Корисно лише як мнемоніка/опис представлення, коли шукаєте його в певному списку.

  • model Char

    Модель, пов’язана з представленням, якщо застосовно.

  • priority Integer

    Коли (модель, тип) запитує представлення, буде повернуто представлення, яке відповідає моделі та типу, з найнижчим пріоритетом (це представлення за замовчуванням).

    Він також визначає порядок застосування представлень під час переглянути успадкування.

  • groups_id Many2many -> odoo.addons.base.models.res_users.Groups

    Групи, яким дозволено використовувати/доступ до поточного перегляду.

    Якщо подання розширює існуюче подання, розширення буде застосовано лише для певного користувача, якщо він має доступ до наданого groups_id.

  • arch Text

    Опис макета перегляду.

Атрибути

Різні типи представлення мають широкий набір атрибутів, що дозволяє налаштовувати загальну поведінку. Деякі основні атрибути будуть пояснені тут. Не всі вони впливають на всі типи представлень.

Примітка

Поточний контекст і права доступу користувача також можуть впливати на можливості перегляду.

  • create

    Вимкнути/увімкнути створення записів у представленні.

  • edit (form & list & gantt)

    Вимкнути/ввімкнути редагування запису в представленні.

  • delete (form & list)

    Вимкніть/увімкніть видалення запису у представленні через спадне меню Дія.

  • duplicate (form)

    Вимкніть/увімкніть дублювання запису в представленні за допомогою спадного меню Дія.

  • decoration-{$name} (list & gantt)

    Визначити умовне відображення запису в стилі тексту рядка на основі атрибутів відповідного запису.

    Значення є виразами Python. Для кожного запису вираз обчислюється з атрибутами запису як контекстними значеннями, і якщо true, до рядка застосовується відповідний стиль. Ось деякі інші значення, доступні в контексті:

    • uid: id поточного користувача,

    • today: поточна місцева дата у вигляді рядка YYYY-MM-DD,

    • now: те саме, що today з додаванням поточного часу. Це значення має формат YYYY-MM-DD hh:mm:ss.

    <tree decoration-info="state == 'draft'"
      decoration-danger="state == 'help_needed'"
      decoration-bf="state='busy'">
      <TREE_VIEW_CONTENT>
    </tree>
    

    Попередження

    Підтримувані значення відрізняються для двох типів перегляду. Перегляд Gantt підтримує лише відображення success, info, warning, danger та secondary. Перегляд списку підтримує bf, it, success, info, warning, danger, muted і primary відображається.

  • sample (kanban & list & gantt & graph & pivot & cohort & dashboard)

    Заповніть подання набором зразків записів, якщо для поточної моделі не знайдено жодного. За замовчуванням цей атрибут має значення false.

    Ці підроблені записи матимуть евристику для певних імен/моделей полів. Наприклад, поле „display_name“ у моделі „res.users“ буде заповнено зразками імен людей, тоді як поле „email“ матиме форму „firstname.lastname@sample.demo“.

    Користувач не зможе взаємодіяти з цими даними, і вони будуть видалені, щойно буде виконана дія (створено запис, додано стовпець тощо)

  • banner_route адреса маршруту, яку потрібно отримати та додати до перегляду.

    Якщо цей атрибут встановлено, controller route url буде отримано та відображено над поданням. Відповідь json від контролера має містити ключ «html».

    Якщо HTML містить тег <link> таблиці стилів, його буде видалено та додано до <head>.

    Для взаємодії з бекендом можна використовувати теги <a type=»action»>. Будь ласка, перегляньте документацію методу _onActionClicked AbstractController (addons/web/static/src/js/views/abstract_controller.js), щоб дізнатися більше.

    Тільки представлення, що розширюють AbstractView та AbstractController, можуть використовувати цей атрибут, наприклад Форма, Канбан, Список, …

    Приклад:

    <tree banner_route="/module_name/hello" />
    
    class MyController(odoo.http.Controller):
        @http.route('/module_name/hello', auth='user', type='json')
        def hello(self):
            return {
                'html': """
                    <div>
                        <link href="/module_name/static/src/css/banner.css"
                            rel="stylesheet">
                        <h1>hello, world</h1>
                    </div> """
            }
    

Спадкування

Поля успадкування

Два наступних поля View використовуються для визначення успадкованих представлень.

  • inherit_id Many2one

    батьківське представлення поточного представлення, не встановлено за замовчуванням. Вкажіть батьківського елемента за допомогою атрибута ref:

    <field name="inherit_id" ref="library.view_book_form"/>
    
  • mode Selection: extension / primary

    режим успадкування, extension за замовчуванням, якщо inherit_id встановлено, primary інакше.

    Прикладом того, де ви бажаєте перевизначити mode під час використання inherit_id, є успадкування делегування. У такому випадку ваша похідна модель буде окремою від батьківської, і представлення, що збігаються з одним, не збігатимуться з іншим. Припустімо, ви успадкували від представлення, пов’язаного з батьківською моделлю, і хочете налаштувати похідне подання, щоб відображати дані з похідної моделі. Mode похідного перегляду має бути встановлений на primary, тому що це базове (і, можливо, єдине) подання для цієї похідної моделі. Інакше правила перегляду зіставлення не застосовуватимуться.

Переглянути зіставлення

  • якщо представлення запитується (модель, тип), перегляд з правильною моделлю та типом, mode=primary і найнижчим пріоритетом буде відповідати.

  • коли представлення запитується id, якщо його режим не primary, його closest батьківський елемент з режимом primary відповідає.

Роздільна здатність перегляду

Роздільна здатність генерує остаточну arch для запитуваного/відповідного primary представлення:

  1. якщо представлення має батьківського елемента, він повністю вирішений, тоді застосовуються специфікації успадкування поточного представлення

  2. якщо представлення не має батьківського елемента, його arch використовується як є

  3. шукаються дочірні елементи поточного представлення з режимом extension, і їх специфікації успадкування застосовуються спочатку в глибину (застосовується дочірнє представлення, потім його дочірні елементи, а потім його брати та сестри)

Результат застосування дочірніх представлень дає кінцеву arch

Специфікації успадкування

Специфікації успадкування складаються з покажчика елементів, щоб відповідати успадкованому елементу в батьківському поданні, і дочірнього елемента, який використовуватиметься для зміни успадкованого елемента.

Існує три типи локаторів елементів для відповідності цільовому елементу:

  • Елемент xpath з атрибутом expr. expr - це XPath expression1, застосований до поточної arch, перший вузол, який він знаходить, є збігом

  • елемент field з атрибутом name, відповідає першому field з тим же name. Усі інші атрибути ігноруються під час зіставлення

  • будь-який інший елемент: збігається перший елемент з такою ж назвою та ідентичними атрибутами (без урахування атрибутів position і version)

<xpath expr="page[@name='pg']/group[@name='gp']/field" position="inside">
  <field name="description"/>
</xpath>

<field name="res_id" position="after"/>

<div name="name" position="replace">
  <div name="name2">
    <field name="name2"/>
  </div>
</div>

Специфікація успадкування може мати додатковий атрибут position, що вказує, як має бути змінений відповідний вузол:

inside (за замовчуванням)

вміст специфікації успадкування додається до відповідного вузла

replace

вміст специфікації успадкування замінює відповідний вузол. Будь-який текстовий вузол, що містить лише $0 у вмісті специфікації, буде замінено повною копією відповідного вузла, фактично обгортаючи відповідний вузол.

after

вміст специфікації успадкування додається до батьківського вузла відповідного вузла після відповідного вузла

before

вміст специфікації успадкування додається до батьківського вузла відповідного вузла після відповідного вузла

attributes

вміст специфікації успадкування має бути елементами attribute з атрибутом name і необов’язковим тілом:

  • якщо елемент attribute має тіло, новий атрибут, названий за його name, створюється на відповідному вузлі з текстом елемента attribute як значення

  • якщо елемент attribute не має тіла, атрибут, названий за його name, видаляється з узгодженого вузла. Якщо такий атрибут не існує, виникає помилка

<field name="sale_information" position="attributes">
  <attribute name="invisible">0</attribute>
  <attribute name="attrs">
    {'invisible': [('sale_ok', '=', False)], 'readonly': [('editable', '=', False)]}
  </attribute>
</field>
move

може використовуватися як прямий дочірній елемент специфікації успадкування з атрибутом inside, replace, after або before position атрибут для переміщення вузла.

<xpath expr="//@target" position="after">
    <xpath expr="//@node" position="move"/>
</xpath>

<field name="target_field" position="after">
    <field name="my_field" position="move"/>
</field>

Специфікації перегляду застосовуються послідовно.

1

функція розширення додана для простішого зіставлення у представленнях QWeb: hasclass(*classes) збігається, якщо контекстний вузол має всі вказані класи

Типи представлення

Активність

Перегляд Активність використовується для відображення активності, пов’язаних із записами. Дані відображаються на діаграмі із записами, які утворюють рядки, а типи дій – стовпцями. У першій комірці кожного рядка відображається картка (яка налаштовується, див. templates, дуже схожа на Канбан), яка представляє відповідний запис. При натисканні на інші комірки відображається детальний опис усіх дій того самого типу для запису.

Попередження

Перегляд активності доступний, лише коли встановлено модуль mail, а також для моделей, які успадковують mail.activity.mixin.

Кореневим елементом представлення активності є <activity>, він приймає такі атрибути:

string (обов’язковий)

Заголовок, який повинен описувати вигляд

Можливі нащадки елемента view:

field

оголошує поля для використання в logic активності. Якщо поле просто відображається у вікні активності, його не потрібно попередньо декларувати.

Можливі атрибути:

name (обов’язково)

назва поля для отримання

templates

визначає шаблони Шаблони QWeb. Визначення карток можна розділити на кілька шаблонів для ясності, але представлення активності повинні визначати принаймні один кореневий шаблон activity-box, який буде відтворено один раз для кожного запису.

Перегляд активності використовує здебільшого стандартний javascript qweb і надає наступні контекстні змінні (див. Канбан для отримання додаткової інформації):

widget

поточний ActivityRecord() можна використовувати для отримання деякої мета-інформації. Ці методи також доступні безпосередньо в контексті шаблону, і до них не потрібно звертатися через widget

record

об’єкт з усіма запитаними полями як його атрибутами. Кожне поле має два атрибути value і raw_value

Календар

Календар переглядає записи як події в щоденному, тижневому, місячному або річному календарі. Їх кореневим елементом є <calendar>. У представленні календаря доступні такі атрибути:

date_start (обов’язково)

назва поля запису, що містить дату початку події

date_stop

назва поля запису, що містить кінцеву дату для події, якщо вказано date_stop записи стають переміщуваними (через перетягування) безпосередньо в календарі

date_delay

альтернатива date_stop, надає тривалість події замість її кінцевої дати (одиниця: день)

color

назва поля запису для кольорової сегментації. Записи в одному кольоровому сегменті виділяються однаковим кольором виділення в календарі, кольори розподіляються напів-випадково. Відображено display_name/avatar видимого запису на бічній панелі

form_view_id

перегляд, який відкривається, коли користувач створює або редагує подію. Зауважте, що якщо цей атрибут не встановлено, перегляд календаря повернеться до ідентифікатора перегляду форми в поточній дії, якщо такий є.

event_open_popup

Якщо для параметра „event_open_popup“ встановлено значення true, перегляд календаря відкриватиме події (або записи) у вікні FormViewDialog. В іншому випадку події відкриються в новому поданні форми (з do_action)

quick_add

enables quick-event creation on click: only asks the user for a name and tries to create a new event with just that and the clicked event time. Falls back to a full form dialog if the quick creation fails

all_day

назва логічного поля в записі, яке вказує, чи позначено відповідну подію як денну (і тривалість не має значення)

mode

Режим відображення за замовчуванням під час завантаження календаря. Можливі атрибути: день, тиждень, місяць, рік

scales

Розділений комами список шкал, які потрібно надати. За замовчуванням доступні всі масштаби. Перегляньте режим для можливих значень масштабу.

create, delete

дозволяє вимкнути відповідну дію в поданні, встановивши для відповідного атрибута значення false

<field>

оголошує поля для агрегування або використання в logic канбану. Якщо поле просто відображається в календарних картках.

Поля можуть мати додаткові атрибути:

invisible

використовуйте «True», щоб приховати значення в картках

avatar_field

лише для поля x2many, щоб відображати аватар замість display_name у картках

write_model та write_field

можна додати фільтр і зберегти результат у визначеній моделі, фільтр додається в бічній панелі

filters і color

використовуйте «True», щоб додати це поле у фільтр на бічній панелі. Ви можете вказати поле color для розфарбовування прапорця.

Когорта

Enterprise feature

Перегляд когорти використовується для відображення та розуміння того, як деякі дані змінюються протягом певного періоду часу. Наприклад, уявіть, що для певного бізнесу клієнти можуть підписатися на певну послугу. Когортний перегляд може відображати загальну кількість підписок щомісяця та вивчати швидкість, з якою клієнт залишає службу (відтік). Якщо клацнути комірку, перегляд когорти перенаправить вас до нової дії, у якій ви побачите лише записи, що містяться в інтервалі часу комірки; ця дія містить подання списку та подання форми.

Примітка

За замовчуванням когортне подання використовуватиме ті самі подання списку та форми, які визначено в дії. Ви можете передати подання списку та подання форми в контекст дії, щоб установити/замінити подання, які використовуватимуться (контекстні ключі для використання: form_view_id і list_view_id)

Наприклад, ось дуже простий перегляд когорти:

<cohort string="Subscription" date_start="date_start" date_stop="date" interval="month"/>

Кореневим елементом перегляду когорти є <cohort>, він приймає такі атрибути:

string (обов’язковий)

Заголовок, який повинен описувати вигляд

date_start (обов’язковий)

Правильне поле дати або часу. Це поле вважається датою початку запису

date_stop (обов’язковий)

Правильне поле дати або часу. Це поле сприймається представленням як кінцева дата запису. Це поле, яке визначатиме відтік.

mode (необов’язковий)

Рядок для опису режиму. Це має бути або „відтік“, або „утримання“ (за замовчуванням). Режим відтоку почнеться з 0% і накопичуватиметься з часом, тоді як утримання почнеться зі 100% і з часом зменшуватиметься.

timeline (необов’язково)

Рядок для опису шкали часу. Це має бути „зворотна“ або „пряма“ (за замовчуванням). Пряма шкала часу відображатиме дані від date_start до date_stop, тоді як зворотна часова шкала відображатиме дані від date_stop до date_start (якщо date_start у майбутньому / більше, ніж date_stop).

interval (необов’язковий)

Рядок для опису інтервалу часу. Це має бути „день“, „тиждень“, „місяць“ (за замовчуванням) або „рік“.

measure (необов’язковий)

Поле, яке можна агрегувати. Це поле використовуватиметься для обчислення значень для кожної клітинки. Якщо не встановлено, перегляд когорти підраховуватиме кількість випадків.

<field> (необов’язково)

дозволяє вказати конкретне поле, щоб керувати ним із доступних вимірювань, його основне використання полягає в тому, щоб приховати поле від вибраних вимірювань:

name (обов’язково)

назва поля для використання у вигляді.

string (необов’язковий)

назва, яке використовуватиметься для відображення поля в когортному представленні, замінює стандартний атрибут Python String поля.

invisible (необов’язково)

якщо істина, поле не відображатиметься ні в активних показниках, ні в параметрах, які можна вибрати (корисно для полів, які не мають сенсу агрегувати, наприклад, поля в різних одиницях, наприклад, € та $).

Інф. панелm

Enterprise feature

Як і зведені та графічні представлення, представлення інф. панелі використовується для відображення агрегованих даних. Однак, в інф. панель можна вбудовувати вкладені представлення, що дає змогу отримати більш повний і цікавий погляд на певний набір даних.

Представлення інф.панелі може відображати підпредставлення, агрегати для деяких полів (за доменом) або навіть формули (вирази, які включають один або кілька агрегатів). Наприклад, ось дуже проста інф. панель:

<dashboard>
    <view type="graph" ref="sale_report.view_order_product_graph"/>
    <group string="Sale">
        <aggregate name="price_total" field="price_total" widget="monetary"/>
        <aggregate name="order_id" field="order_id" string="Orders"/>
        <formula name="price_average" string="Price Average"
            value="record.price_total / record.order_id" widget="percentage"/>
    </group>
    <view type="pivot" ref="sale_report.view_order_product_pivot"/>
</dashboard>

Кореневим елементом представлення Інф. панелі є <dashboard>, він не приймає ніяких атрибутів.

Існує 5 можливих типів тегів у представленні інф. панелі:

view

оголошує підпредставлення.

Допустимими атрибутами є:

тип (обов’язково)

Тип підпредставлення. Наприклад, graph або pivot.

ref (необов’язково)

Ідентифікатор xml для представлення. Якщо не вказано, буде використано представлення за замовчуванням для моделі.

name (необов’язково)

Рядок, який ідентифікує цей елемент. Здебільшого корисно використовувати як ціль для xpath.

group

визначає макет стовпця. Насправді це дуже схоже на елемент групи у представленні форми.

Допустимими атрибутами є:

string (необов’язковий)

Опис, який буде відображатися як назва групи.

colspan (необов’язково)

Кількість підколонок у цьому тегу групи. За замовчуванням, 6.

col (необов’язково)

Кількість стовпців, що охоплюються цим тегом групи (має сенс лише всередині іншої групи). За замовчуванням, 6.

aggregate

оголошує агрегат. Це значення агрегату для заданого поля у поточному домені.

Зверніть увагу, що агрегати слід використовувати всередині групового тегу (інакше стиль не буде застосовано належним чином).

Допустимими атрибутами є:

field (обов’язкове)

Назва поля, яке буде використовуватися для обчислення агрегату. Можливі типи полів:

  • integer (груповий оператор за замовчуванням - sum)

  • float (груповий оператор за замовчуванням - sum)

  • float (груповий оператор за замовчуванням - sum)

name (обов’язково)

Рядок для ідентифікації цього агрегату (корисний для формул)

string (необов’язковий)

Короткий опис, який буде показано над значенням. Якщо його не вказано, значення повернеться до рядка поля.

domain (необов’язково)

Додаткове обмеження на набір записів, які ми хочемо об’єднати. Цей домен буде об’єднано з поточним доменом.

domain_label (необов’язково)

Коли користувач натискає на агрегат з доменом, його буде додано до подання пошуку як фасет. За допомогою цього атрибута можна налаштувати рядок, що відображається для цього фасету.

group_operator (необов’язково)

Дійсний ідентифікатор агрегатної функції postgreSQL для використання при агрегуванні значень (див. https://www.postgresql.org/docs/9.5/static/functions-aggregate.html). Якщо не вказано, за замовчуванням використовується group_operator з визначення поля. Зауважте, що агрегування значень полів не відбувається, якщо значення group_operator дорівнює «».

Примітка

Тут також можна використовувати спеціальну агрегатну функцію count_distinct (визначену в odoo)

<aggregate name="price_total_max" field="price_total" group_operator="max"/>
col (необов’язково)

Кількість стовпців, що охоплюються цим тегом (має сенс лише всередині групи). За замовчуванням, 1.

widget (необов’язково)

Віджет для форматування значення (як атрибут віджету для полів). Наприклад, monetary.

help (необов’язково)

Довідкове повідомлення для відображення у підказці (еквівалент довідки для поля у python)

measure (необов’язковий)

Цей атрибут є назвою поля, що описує міру, яка має бути використана на графіку та у зведеному представленні при натисканні на агрегат. Спеціальне значення __count__ можна використовувати для використання міри підрахунку.

<aggregate name="total_ojects" string="Total Objects" field="id" group_operator="count" measure="__count__"/>
clickable (необов’язково)

Логічне значення, яке вказує, чи має бути цей агрегат клікабельним (за замовчуванням - true). Натискання на агрегат, який можна натиснути, змінить вимірювання, що використовуються в підпредставленнях, і додасть значення атрибута домену (якщо такий є) до представлення пошуку.

value_label (необов’язково)

Рядок, розміщений праворуч від агрегованого значення. Наприклад, може бути корисно вказати одиницю виміру агрегованого значення.

formula

оголошує похідне значення. Формули - це значення, обчислені з агрегатів.

Зверніть увагу, що формули, як і агрегати, слід використовувати всередині групового тегу (інакше стиль не буде застосовано належним чином).

Допустимими атрибутами є:

value (обов’язково)

Рядковий вираз, який буде обчислено за допомогою вбудованого оцінювача python (у веб-клієнті). Кожен агрегат можна використовувати в контексті, в змінній record. Наприклад, record.price_total / record.order_id.

name (необов’язково)

Рядок для ідентифікації цієї формули

string (необов’язковий)

Короткий опис, який буде відображатися над формулою.

col (необов’язково)

Кількість стовпців, що охоплюються цим тегом (має сенс лише всередині групи). За замовчуванням, 1.

widget (необов’язково)

Віджет для форматування значення (наприклад, атрибут віджета для полів). Наприклад, monetary. За замовчуванням це „float“.

help (необов’язково)

Довідкове повідомлення для відображення у підказці (еквівалент довідки для поля у python)

value_label (необов’язково)

Рядок, розміщений праворуч від значення формули. Наприклад, може бути корисно вказати одиницю виміру значення формули.

widget

Оголошує спеціалізований віджет, який буде використано для відображення інформації. Цей механізм подібний до віджетів у представленні форми.

Допустимими атрибутами є:

name (обов’язково)

Рядок для визначення того, який віджет має бути створено. Представлення перегляне widget_registry, щоб отримати відповідний клас.

col (необов’язково)

Кількість стовпців, що охоплюються цим тегом (має сенс лише всередині групи). За замовчуванням, 1.

Форма

Представлення форм використовуються для відображення даних з одного запису. Їх кореневим елементом є <form>. Вони складаються зі звичайного HTML з додатковими структурними та семантичними компонентами.

Структурні компоненти

Структурні компоненти забезпечують структуру або «візуальні» функції з невеликою логікою. Вони використовуються як елементи або набори елементів у представленнях форм.

notebook

визначає розділ із вкладками. Кожна вкладка визначається дочірнім елементом page. Сторінки можуть мати такі атрибути:

string (обов’язково)

заголовок вкладки

accesskey

ключ доступу HTML

attrs

стандартні динамічні атрибути на основі значень записів

Примітка

Зауважте, що notebook не слід розміщувати в group

group

використовується для визначення макетів стовпців у формах. За замовчуванням групи визначають 2 стовпці, а більшість прямих дочірніх груп займають один стовпець. Прямі дочірні елементи field груп відображають мітку за умовчанням, а мітка та саме поле мають colspan 1 кожен.

Кількість стовпців у group можна налаштувати за допомогою col атрибуту, кількість стовпців, які приймає елемент, можна налаштувати за допомогою colspan.

Дочірні розкладені горизонтально (намагається заповнити наступний стовпчик перед зміною рядка).

Групи можуть мати атрибут string, який відображається як назва групи

newline

корисно лише в елементах group, завершує поточний рядок раніше і негайно перемикається на новий рядок (без попереднього заповнення стовпців, що залишилися)

separator

малий горизонтальний інтервал із атрибутом string поводиться як заголовок розділу

sheet

можна використовувати як прямий дочірній елемент form для вужчого та більш адаптивного макета форми

header

у поєднанні з sheet забезпечує розташування на всю ширину над самим аркушем, зазвичай використовується для відображення кнопок робочого процесу та віджетів стану

Семантичні компоненти

Семантичні компоненти пов’язані з системою Odoo та дозволяють взаємодіяти з нею. Доступні семантичні компоненти:

button

викликати в систему Odoo, подібно до кнопок перегляду списку. Крім того, можна вказати такий атрибут:

special

для форм, відкритих у діалогових вікнах: save, щоб зберегти запис і закрити діалогове вікно, cancel, щоб закрити діалогове вікно без збереження.

confirm

повідомлення про підтвердження для відображення (і для прийняття користувачем) перед виконанням виклику кнопки Odoo (також працює в режимах перегляду канбан).

field

відображає (і дозволяє редагувати, можливо) одне поле поточного запису. Підтримується кількаразове використання поля в поданні форми, і поля можуть отримувати різні значення для модифікаторів „невидимий“ і „лише для читання“. Однак поведінка не гарантується, якщо існує кілька полів із різними значеннями для модифікатора „обов’язково“. Можливі атрибути вузла поля:

name (обов’язково)

назва поля для візуалізації

id

ідентифікатор вузла. Корисно, коли в поданні є кілька входжень одного поля (див. компонент label нижче). За замовчуванням це назва поля.

widget

поля мають відтворення за замовчуванням на основі їх типу (наприклад, Char, Many2one). Атрибути widget дозволяють використовувати інший метод візуалізації та контекст.

options

Об’єкт JSON, що визначає параметр конфігурації для віджета поля (включно з віджетами за замовчуванням)

class

Клас HTML, який потрібно встановити на згенерований елемент, загальні класи полів:

oe_inline

запобігти звичайний розрив рядка після полів

oe_left, oe_right

floats поле у відповідному напрямку

oe_read_only, oe_edit_only

лише відображає поле у відповідному режимі форми

oe_avatar

для полів зображення відображає зображення як «avatar» (квадрат, максимальний розмір 90x90, деякі декоратори зображення)

groups

відображає поле лише для певних користувачів

on_change

викликає вказаний метод, коли значення цього поля редагується, може генерувати оновлення інших полів або відображати попередження для користувача

Застаріло починаючи з версії 8.0: Використовуйте odoo.api.onchange() на моделі

attrs

динамічні мета-параметри на основі записаних значень

domain

лише для реляційних полів, фільтри для застосування під час відображення наявних записів для вибору

context

лише для реляційних полів, контекст для передачі під час отримання можливих значень

readonly

відображати поле як у режимі лише для читання, так і в режимі редагування, але ніколи не робити його доступним для редагування

required

створює помилку та запобігає збереженню запису, якщо поле не має значення

nolabel

не відображати автоматично мітку поля, має сенс, лише якщо поле є прямим дочірнім елементом group

placeholder

довідкове повідомлення для відображення в empty полях. Може замінювати мітки полів у складних формах. Не має бути прикладом даних, оскільки користувачі можуть сплутати текст заповнювача із заповненими полями

mode

для One2many, режим відображення (тип перегляду), який використовується для пов’язаних записів поля. Одне з tree, form, kanban або graph. Типовим є tree (відображення списку)

help

спливаюча підказка, яка відображається для користувачів під час наведення курсора на поле або його мітку

filename

для двійкових полів, назва пов’язаного поля, яке містить назву файлу

password

вказує, що поле Char зберігає пароль і що його дані не повинні відображатися

kanban_view_ref

для відкриття певного перегляду канбану під час вибору записів із m2o/m2m у мобільному середовищі

label

коли компонент field не розміщено безпосередньо в group, або коли його атрибут nolabel установлено, мітка поля не відображається автоматично поряд із його значенням. Компонент label - це ручна альтернатива відображення мітки поля. Можливі атрибути:

for (обов’язковий)

посилання на поле, пов’язане з міткою. Може бути або назвою поля, або його ідентифікатором (атрибут id, встановлений у field). Якщо в поданні є кілька входжень того самого поля та є кілька компонентів label, пов’язаних із цими вузлами field, ці мітки повинні мати унікальні атрибути for (у цьому випадку посилаються на атрибут id відповідних вузлів field).

string

ярлик для відображення. Відображати мітку поля (виходячи з визначення поля в моделі) за замовчуванням.

class

те саме, що для компонента field.

attrs

те саме, що для компонента field.

Основна структура

<form>
  <header>
    <field name="state" widget="statusbar"/>
  </header>
  <sheet>
    <div class="oe_button_box">
      <BUTTONS/>
    </div>
    <group>
      <group>
        <field name="fname"/>
      </group>
    </group>
    <notebook>
      <page string="Page1">
        <group>
          <CONTENT/>
        </group>
      </page>
      <page string="Page2">
        <group>
          <CONTENT/>
        </group>
      </page>
    </notebook>
  </sheet>
</form>

Гант

Enterprise feature

Представлення Ганта належним чином відображають діаграми Ганта (для планування).

Кореневим елементом представлень Gantt є <gantt/>, він не має дочірніх, але може приймати такі атрибути:

date_start (обов’язково)

назва поля, що містить дату початку події для кожного запису.

date_stop (обов’язково)

назва поля, що містить кінцеву тривалість події для кожного запису.

color

назва поля, яке використовується для кольору pills відповідно до його значення

decoration-{$name}

дозволяють змінювати стиль тексту рядка на основі атрибутів відповідного запису.

Значення є виразами Python. Для кожного запису вираз обчислюється з атрибутами запису як контекстними значеннями, і якщо true, до рядка застосовується відповідний стиль. Ось деякі інші значення, доступні в контексті:

  • uid: id поточного користувача,

  • today: поточна місцева дата у вигляді рядка YYYY-MM-DD,

  • now: те саме, що today з додаванням поточного часу. Це значення має формат YYYY-MM-DD hh:mm:ss.

{$name} може бути одним із таких bootstrap contextual color (danger, info, secondary, success або warning).

default_group_by

назва поля для групування завдань

disable_drag_drop

якщо встановлено значення true, перегляд ганта не матиме підтримки перетягування та скидання

consolidation

назва поля для відображення значення консолідації в клітинці запису

consolidation_max

словник із полем «групувати за» як ключем і максимальним значенням консолідації, якого можна досягти перед відображенням клітинки червоним кольором (наприклад, {"user_id": 100})

consolidation_exclude

назва поля, яке описує, чи потрібно виключити завдання з консолідації, якщо встановлено значення true, у рядку консолідації відображається смугаста зона

create, cell_create, edit, delete, plan

дозволяє вимкнутивідповідну дію в представленні, встановивши для відповідного атрибута значення false (за замовчуванням: true).

  • create: якщо ввімкнено, на панелі керування буде доступна кнопка Додати для створення записів.

  • cell_create: якщо ввімкнено та create увімкнено, кнопка «+» відображатиметься під час наведення курсора на клітинку часового інтервалу для створення нового запису в цьому слоті.

  • edit: якщо ввімкнено, відкриті записи будуть у режимі редагування (тому їх можна буде редагувати).

  • plan: якщо ввімкнено та edit, кнопка «збільшувальне скло» відображатиметься на часових інтервалах для планування непризначених записів у цей часовий інтервал.

Example

Якщо ви не бажаєте створювати записи у представленні Ганта, а в моделі потрібні дати початку та завершення, функцію планування слід вимкнути, оскільки жодного запису не буде знайдено.

offset

Залежно від масштабу, кількість одиниць, які потрібно додати до сьогоднішнього дня, щоб обчислити період за умовчанням. Приклади: зсув +1 у default_scale тиждень відкриє перегляд ганта для наступного тижня, а зміщення -2 у default_scale місяць відкриє представлення ганта 2 місяці тому.

progress

назва поля, що містить відсоток завершення для події запису, від 0 до 100

string

назва представлення Ганта

precision

Об’єкт JSON, який визначає точність примикання для pills у кожному масштабі.

Можливі значення для шкали day (за замовчуванням: hour):

  • hour: записує час, прив’язаний до повних годин (наприклад: 7:12 стає 8:00)

  • hour:half: запис часу прив’язується до півгодини (наприклад: 7:12 стає 7:30)

  • hour:quarter: запис часу прив’язується до півгодини (наприклад: 7:12 стає 7:15)

Можливі значення для шкали week (за замовчуванням: day:half):

  • day: записує час, прив’язаний до повних днів (наприклад, 7:28 стає 23:59:59 попереднього дня, 22:32 стає 12:00 поточного дня)

  • day:half: записує час до півгодини (наприклад, 7:28 стає 12:00)

Можливі значення для шкали week (за замовчуванням: day:half):

  • day: записує час, прив’язаний до повних днів (наприклад, 7:28 стає 23:59:59 попереднього дня, 22:32 стає 12:00 поточного дня)

  • day:half: записує час до півгодини (наприклад, 7:28 стає 12:00)

Шкала year завжди прив’язується до повного дня.

Приклад атрибута точності: {"day": "hour:quarter", "week": "day:half", "month": "day"}

total_row

логічне значення, щоб контролювати, чи слід відображати рядок із загальною кількістю записів. (за замовчуванням: false)

collapse_first_level

логічне значення, щоб контролювати, чи можливо згорнути кожен рядок, якщо згруповано одним полем. (за замовчуванням: false, згортання починається при групуванні за двома полями)

display_unavailability

логічне значення для позначення дат, повернутих функцією gantt_unavailability моделі, як доступних у представленні Ганта. У них ще можна планувати записи, але візуально відображається їх недоступність. (за замовчуванням: false)

default_scale

масштаб за замовчуванням під час візуалізації представлення. Можливі значення (за замовчуванням: month):

  • day

  • week

  • month

  • year

scales

розділений комами список допустимих масштабів для цього перегляду. За замовчуванням дозволені всі масштаби. Для можливих значень масштабу для використання в цьому списку перегляньте default_scale.

templates

визначає Шаблони QWeb шаблон gantt-popover, який використовується, коли користувач наводить курсор на один із записів у представленні ганта.

Представлення Гант використовує здебільшого стандартний javascript qweb і надає такі контекстні змінні:

widget

поточний GanttRow() можна використовувати для отримання певної мета-інформації. Метод getColor для перетворення в ціле число кольору також доступний безпосередньо в контексті шаблону без використання widget.

on_create

Якщо це вказано під час натискання кнопки Додати в представленні, замість відкриття загального діалогового вікна запускати дію клієнта. тут має міститися xmlid дії (наприклад: on_create="%(my_module.my_wizard)d"

form_view_id

представлення, яке відкривається, коли користувач створює або редагує запис. Зауважте, що якщо цей атрибут не встановлено, представлення ганта повернеться до ідентифікатора представлення форми в поточній дії, якщо така є.

dynamic_range

якщо встановлено значення true, представлення ганта розпочнеться з першого запису, а не з початку року/місяця/дня.

thumbnails

Це дозволяє відображати мініатюру поруч із назвою групи, якщо група є реляційним полем. Це очікує python dict, які ключі є назвою поля в активній моделі. Значення - це назви полів, що містять мініатюру на пов’язаній моделі.

Приклад: завдання мають поле user_id, яке посилається на res.users. Модель res.users має зображення поля, яке містить аватар, а потім:

<gantt
   date_start="date_start"
   date_stop="date_stop"
   thumbnails="{'user_id': 'image_128'}"
 >
 </gantt>

відображатиме аватари користувачів поряд із їхніми іменами, якщо згруповано за user_id.

Графік

Графічне представлення використовується для візуалізації агрегацій для кількох записів або груп записів. Його кореневим елементом є <graph>, який може приймати такі атрибути:

type

один із bar (за замовчуванням), pie та line, тип графіка для використання

stacked

використовується лише для гістограм. Якщо присутній і встановлено значення True, смуги складаються в групу

disable_linking

встановіть значення True, щоб запобігти перенаправленню кліків на графіку до представлення списку

order

якщо встановлено, значення осі x буде відсортовано за замовчуванням відповідно до їх вимірювання щодо заданого порядку (asc або desc). Використовується лише для графіків bar та pie.

Єдиним дозволеним елементом у представленні графіка є field, яке може мати такі атрибути:

name (обов’язково)

назва поля для використання в представленні. Якщо використовується для групування (а не агрегування)

title (необов’язково)

рядок, що відображається у верхній частині графіка.

invisible (необов’язково)

якщо істина, поле не відображатиметься ні в активних мірах, ні в мірах, які можна вибрати.

type

вказує, чи слід використовувати поле як критерій групування чи як агреговане значення в межах групи. Можливі значення:

row (за замовчуванням)

групи за вказаним полем. Усі типи графіків підтримують принаймні один рівень групування, деякі можуть підтримувати більше.

col

дозволено в представленні графіків, але використовується лише у зведених таблицях

measure

поле для агрегування в групу

interval

у полях дати та дати й часу групує за вказаним інтервалом (день, тиждень, місяць, квартал або рік) замість групування за конкретною датою та часом ( фіксована друга роздільна здатність) або дата (фіксована роздільна здатність дня).

Показники автоматично генеруються з полів моделі; використовуються лише агреговані поля. Ці показники також відсортовані в алфавітному порядку в рядку поля.

Попередження

агрегації подання графіків виконуються для вмісту бази даних, незбережені функціональні поля не можна використовувати в поданнях графіків

Канбан

Перегляд канбану є візуалізацією дошки канбану: він відображає записи як «картки», що знаходиться на півдорозі між переглядом списку та нередагованим виглядом форми. Записи можуть бути згруповані в стовпці для використання під час візуалізації робочого процесу або маніпуляції (наприклад, завдання чи керування прогресом роботи) або розгруповані (використовуються просто для візуалізації записів).

Примітка

Перегляд Канбан завантажить і відобразить максимум десять стовпців. Будь-який стовпець після цього буде закрито (але користувач усе ще може відкрити його).

Кореневим елементом представлення Канбан є <kanban>, він може використовувати такі атрибути:

default_group_by

чи має бути згруповане представлення канбану, якщо групування не вказано через дію чи поточний пошук. Має бути назва поля для групування, якщо інше групування не вказано

default_order

порядок сортування карток, який використовується, якщо користувач ще не відсортував записи (через список)

class

додає класи HTML до кореневого елемента HTML перегляду Канбан

examples

якщо встановити ключ у KanbanExamplesRegistry, приклади налаштувань стовпців будуть доступні в згрупованому представленні канбану. Тут приклад того, як визначити ці налаштування.

group_create

чи відображається панель «Додати новий стовпець» чи ні. За-замовчування: true.

group_delete

чи можна видалити групи через контекстне меню. За замовчуванням: true.

group_edit

чи можна видалити групи через контекстне меню. За замовчуванням: true.

archivable

чи можна архівувати/відновлювати записи, що належать до стовпця, якщо в моделі визначено поле active. За замовчуванням: true.

quick_create

чи має бути можливість створювати записи без переходу до представлення форми. За замовчуванням quick_create увімкнено, коли представлення Канбан згруповано за полями many2one, selection, char або boolean, і вимкнено, якщо ні.

quick_create_view

Посилання на представлення form, що вказує на представлення, яке використовується для швидкого створення записів.

records_draggable

чи має бути можливість перетягувати записи, коли канбан згрупований. За замовчуванням: true.

Установіть значення true, щоб завжди вмикати його, і false, щоб завжди його вимикати.

Можливі нащадки елемента view:

field

оголошує поля для використання в logic канбану. Якщо поле просто відображається в поданні Канбан, його не потрібно попередньо декларувати.

Можливі атрибути:

name (обов’язково)

назва поля для отримання

progressbar

оголошує елемент індикатора прогресу для розміщення поверх стовпців канбану.

Можливі атрибути:

field (обов’язково)

назва поля, значення якого використовуються для підгрупування записів стовпців на панелі виконання

colors (обов’язково)

JSON зіставляє значення поля вище з кольорами «danger», «warning», «success» або «muted»

sum_field (необов’язковий)

назва поля, значення записів стовпця якого буде підсумовано та відображено поруч із індикатором прогресу (якщо опущено, відображається загальна кількість записів)

templates

визначає список шаблонів Шаблони QWeb. Визначення карток можна розділити на кілька шаблонів для ясності, але представлення канбану повинні визначати принаймні один кореневий шаблон kanban-box, який буде відтворено один раз для кожного запису.

Представлення Гант використовує здебільшого стандартний javascript qweb і надає такі контекстні змінні:

widget

поточний KanbanRecord() можна використовувати для отримання деякої мета-інформації. Ці методи також доступні безпосередньо в контексті шаблону, і до них не потрібно звертатися через widget

record

об’єкт з усіма запитаними полями як його атрибутами. Кожне поле має два атрибути value і raw_value, перше форматується відповідно до поточних параметрів користувача, останнє є прямим значенням із read() (окрім для полів дати та часу, які відформатовані відповідно до локалі користувача)

context

поточний контекст, що походить від дії, і поле one2many або many2many у випадку представлення Канбан, вбудованого в представленні Форми

user_context

self-explanatory

read_only_mode

self-explanatory

selection_mode

встановіть значення true, коли перегляд канбану відкривається в мобільному середовищі з поля m2o/m2m для вибору записів.

Примітка

натискання на поле m2o/m2m у мобільному середовищі відкриває представлення канбану

кнопки та поля

Хоча більшість шаблонів Канбан є стандартними Шаблони QWeb, представлення Канбан спеціально обробляє елементи field, button і a:

  • за замовчуванням поля замінюються їх відформатованим значенням, якщо не вказано атрибут widget, у цьому випадку їх рендеринг і поведінка залежать від відповідного віджета. Можливі значення (серед іншого):

    handle

    для полів sequence (або integer), за якими відсортовано записи, дозволяє перетягувати записи, щоб змінити їх порядок.

  • кнопки та посилання з атрибутом type починають виконувати операції, пов’язані з Odoo, а не стандартну функцію HTML. Можливі типи:

    action, object

    стандартна поведінка для кнопок Odoo, можна використовувати більшість атрибутів, пов’язаних зі стандартними кнопками Odoo.

    open

    відкриває запис картки у вигляді форми в режимі лише для читання

    edit

    відкриває запис картки у представленні форми в режимі редагування

    delete

    видаляє запис картки та видаляє картку

Якщо вам потрібно розширити представлення Канбан, перегляньте KanbanRecord().

Список

Кореневим елементом представлень списку є <tree>2. Корінь представлення списку може мати такі атрибути:

editable

за замовчуванням вибір рядка представлення списку відкриває відповідне представлення форми. Атрибути editable роблять сам перегляд списку доступним для редагування на місці.

Дійсні значення: top і bottom, завдяки чому нові записи відображаються відповідно у верхній або нижній частині списку.

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

Примітка

якщо для атрибута edit встановлено значення false, опція editable буде проігнорована.

multi_edit

редагований або нередагований список може активувати функцію багаторазового редагування, визначивши multi_edit=1

default_order

перевизначає порядок представлення, замінюючи порядок моделі (_order атрибут моделі). Значення – це список полів, розділених комами, з постфіксом desc для сортування у зворотному порядку:

<tree default_order="sequence,name desc">
decoration-{$name}

дозволяють змінювати стиль тексту рядка на основі атрибутів відповідного запису.

{$name} може бути bf (font-weight: bold), it (font-style: italic) або будь-який bootstrap contextual color (danger, info, muted, primary, success або warning).

create, edit, delete, import, export_xlsx

дозволяє вимкнути відповідну дію в представленні, встановивши для відповідного атрибута значення false

limit

стандартний розмір сторінки. Це має бути додатне ціле число

groups_limit

коли представлення списку згруповано, кількість груп на сторінці за замовчуванням. Це має бути ціле число позиції

expand

коли представлення списку згрупований, автоматично відкривати перший рівень груп, якщо встановлено значення true (за замовчуванням: false)

Можливі дочірні елементи представлення списку:

button

відображає кнопку в клітинці списку

icon

значок для відображення кнопки

string
  • якщо icon немає, текст кнопки

  • якщо є icon, alt текст для значка

type

тип кнопки, вказує, як її натискання впливає на Odoo:

object

викликати метод у моделі списку. name кнопки - це метод, який викликається з ідентифікатором запису поточного рядка та поточним контекстом.

action

завантажити і виконати ir.actions, name кнопки є ідентифікатором бази даних дії. Контекст розширюється за допомогою моделі списку (як active_model), запису поточного рядка (active_id) і всіх записів, наразі завантажених у списку (active_ids, може бути лише підмножиною записи бази даних, що відповідають поточному пошуку)

name

див. type

args

див. type

attrs

динамічні атрибути на основі значень записів.

Зіставлення атрибутів на домени, домени оцінюються в контексті запису поточного рядка, якщо True відповідний атрибут встановлено в комірці.

Можливий атрибут invisible (приховує кнопку).

states

скорочення для invisible attrs: список станів, розділених комами, вимагає, щоб модель мала поле state і щоб воно використовувалося в поданні.

Робить кнопку невидимою, якщо запис не в одному з перелічених станів

Небезпека

Використання states у поєднанні з attrs може призвести до несподіваних результатів, оскільки домени поєднуються з логічним AND.

context

об’єднано з контекстом представлення під час виконання виклику кнопки Odoo

field

визначає стовпець, де має відображатися відповідне поле для кожного запису. Можна використовувати такі атрибути:

name

назва поля для відображення в поточній моделі. Дана назва може використати лише один раз для предмставлення

string

заголовок стовпця поля (за замовчуванням використовується string поля моделі)

invisible

отримує та зберігає поле, але не відображає стовпець у таблиці. Необхідно для полів, які не повинні відображатися, але використовуються, наприклад, @colors

groups

перелічує групи, які мають бачити поле

widget

альтернативні представлення для відображення поля. Можливі значення представлення списку (серед іншого):

progressbar

відображає поля float як індикатор виконання.

handle

для полів sequence (або integer), за якими відсортовано записи, замість відображення значення поля просто відображає піктограму перетягування, щоб змінити порядок записів.

sum, avg

відображає відповідний агрегат у нижній частині стовпця. Агрегація обчислюється лише для поточно відображених записів. Операція агрегування має відповідати group_operator відповідного поля

attrs

динамічні атрибути на основі значень записів. Впливає лише на поточне поле, отже, напр. invisible приховає поле, але залишить видимим те саме поле інших записів, сам стовпець не приховає

width (для editable)

якщо в списку немає даних, ширину стовпця можна змінити за допомогою цього атрибута. Значенням може бути абсолютна ширина (наприклад, „100px“) або відносна вага (наприклад, „3“, тобто цей стовпець буде в 3 рази більшим за інші). Зауважте, що коли в списку є записи, ми дозволяємо браузеру автоматично адаптувати ширину стовпців відповідно до їх вмісту, і цей атрибут ігнорується.

decoration-{$name}

дозволяють змінювати стиль тексту комірки на основі атрибутів відповідного запису.

{$name} може бути bf (font-weight: bold), it (font-style: italic) або будь-який bootstrap contextual color (danger, info, muted, primary, success або warning).

nolabel

якщо встановлено значення «1», заголовок стовпця залишиться порожнім. Крім того, стовпець не можна сортувати.

optional

робить стовпець необов’язковим. Якщо встановлено значення «сховати», стовпець буде приховано за умовчанням. Якщо встановлено значення «показати», стовпець буде видимим за умовчанням. Вибір видимості користувача зберігається в локальному сховищі браузера.

Примітка

Якщо представлення списку editable, будь-який атрибут поля з форми представлення також є дійсним і використовуватиметься під час налаштування вбудованого представлення форми.

Примітка

У випадку під-представленні списку (відображення One2many/Many2many у представленні форми), атрибут column_invisible може бути корисним, щоб приховати стовпець залежно від батьківського об’єкта.

<field name="product_is_late" attrs="{'column_invisible': [('parent.has_late_products', '=', False)]}"/>

Примітка

Коли подання списку згруповано, числові поля агрегуються та відображаються для кожної групи. Крім того, якщо в групі занадто багато записів, праворуч від рядка групи з’явиться пейджер. З цієї причини недоцільно мати числове поле в останньому стовпці, коли в поданні списку його можна згрупувати (однак це добре для полів x2manys у поданні форми: їх не можна згрупувати ).

groupby

визначає спеціальні заголовки (з кнопками) для поточного представлення під час групування записів у many2one полях. Також можна додати field всередину groupby, який можна використовувати для модифікаторів. Таким чином, ці поля належать до комоделі many2one. Ці додаткові поля будуть отримані пакетно.

name

назва поля many2one (у поточній моделі). Настроюваний заголовок відображатиметься під час групування представлення за назвою цього поля.

<groupby name="partner_id">
  <field name="name"/> <!-- name of partner_id -->
  <button type="edit" name="edit" string="Edit"/>
  <button type="object" name="my_method" string="Button1"
    attrs="{'invisible': [('name', '=', 'Georges')]}"/>
</groupby>

Можна визначити спеціальну кнопку (type="edit"), щоб відкрити представлення форми many2one.

control

визначає спеціальні елементи керування для поточного представлення.

Це має сенс, якщо батьківське представлення tree знаходиться всередині поля One2many.

Не підтримує жодних атрибутів, але може мати дочірніх:

create

додає кнопку для створення нового елемента в поточному списку.

Примітка

Якщо визначено будь-який створити, він перезапише стандартну кнопку «додати рядок».

Підтримуються такі атрибути:

string (обов’язково)

Текст, що відображається на кнопці.

context

Цей контекст буде об’єднано з існуючим під час отримання значення за замовчуванням нового запису.

Наприклад, його можна використовувати для заміни значень за замовчуванням.

У наведеному нижче прикладі кнопка «додати рядок» за умовчанням буде замінена трьома новими кнопками: «Додати продукт», «Додати розділ» і «Додати примітку».

«Додати продукт» встановить для поля „display_type“ значення за умовчанням.

Дві інші кнопки встановлять для поля „display_type“ значення відповідно „line_section“ і „line_note“.

<control>
  <create
    string="Add a product"
  />
  <create
    string="Add a section"
    context="{'default_display_type': 'line_section'}"
  />
  <create
    string="Add a note"
    context="{'default_display_type': 'line_note'}"
  />
</control>
2

з історичних причин воно бере свій початок у представленнях типу дерева, яке пізніше було перепрофільовано на відображення більше типу таблиці/списку

Карта

Enterprise feature

Це представлення здатне відображати записи на карті та маршрути між ними. Запис представлений шпильками. Це також дозволяє візуалізувати поля з моделі у спливаючому вікні, прив’язаному до шпильки запису.

Примітка

Модель, до якої представлення подання, має містити res.partner many2one, оскільки представлення покладається на поля адреси та координат res.partner для локалізації записів.

Api

Представлення використовує API платформ даних про місцезнаходження, щоб отримати плитки (фон карти), виконати геопереадресацію (перетворення адрес на набір координат) і отримати маршрути. Представлення реалізує два API, стандартний, openstreet map може отримувати плитки та виконувати геопересилання. Для цього API не потрібен маркер. Щойно дійсний токен MapBox буде надано в загальних налаштуваннях, перегляд переключиться на API Mapbox. Цей API є швидшим і дозволяє обчислювати маршрути. Маркер доступний, зареєструвавшись в MapBox

Структурні компоненти

Кореневим елементом представлення є <map>, дозволено кілька атрибутів

res_partner

Містить res.partner many2one. Якщо не надано, перегляд створить порожню карту.

default_order

Якщо надано поле, перегляд замінить порядок моделі за замовчуванням. Поле має бути частиною моделі, до якої застосовано подання, а не з res.partner

routing

якщо true, будуть показані маршрути між записами. Для перегляду все ще потрібен дійсний маркер MapBox і принаймні два розташовані записи. (тобто записи мають res.partner many2one, а партнер має адресу або дійсні координати)

hide_name

якщо true приховати назву у спливаючому вікні маркера (за замовчуванням: false)

hide_address

якщо true приховати адресу зі спливаючого вікна маркера (за замовчуванням: false)

Елемент <map> може містити декілька елементів <field>. Кожен елемент <field> буде інтерпретуватися як рядок у спливаючому вікні маркера. Атрибути поля такі:

name

Поле для відображення.

string

Цей рядок відображатиметься перед вмістом поля. Його можна використовувати як опис.

limit

Розмір сторінки (за замовчуванням: 80). Це має бути додатне ціле число.

Жоден атрибут або елемент не є обов’язковим, але, як зазначено вище, якщо не надано res.partner many2one, представлення не зможе знайти записи.

Наприклад, ось карта:
<map res_partner="partner_id" default_order="date_begin" routing="true" hide_name="true">
    <field name="partner_id" string="Customer Name"/>
</map>

Зведена таблиця

Зведене таюлиця використовується для візуалізації агрегацій у представленні зведена таблиця. Його кореневим елементом є <pivot>, який може приймати такі атрибути:

disable_linking

Установіть значення True, щоб видалити посилання клітинок таблиці на представлення списку.

display_quantity

Установіть значення true, щоб стовпець Кількість відображався за умовчанням.

default_order

Назва міри та порядок (за зростанням або спаданням), які використовуватимуться як порядок за замовчуванням у представленні.

<pivot default_order="foo asc">
   <field name="foo" type="measure"/>
</pivot>

Єдиним дозволеним елементом у представленні графіка є field, яке може мати такі атрибути:

name (обов’язково)

назва поля для використання в представленні. Якщо використовується для групування (а не агрегування)

string

назва, яке використовуватиметься для відображення поля у зведеній таблиці, замінює стандартний атрибут python String поля.

type

вказує, чи слід використовувати поле як критерій групування чи як агреговане значення в межах групи. Можливі значення:

row (за замовчуванням)

групування за вказаним полем, кожна група отримує окремий рядок.

col

створює групи по стовпцях

measure

поле для агрегування в групу

interval

у полях дати та дати й часу групує за вказаним інтервалом (день, тиждень, місяць, квартал або рік) замість групування за конкретною датою та часом ( фіксована друга роздільна здатність) або дата (фіксована роздільна здатність дня).

invisible

якщо істина, поле не відображатиметься ні в активних показниках, ні в параметрах, які можна вибрати (корисно для полів, які не мають сенсу агрегувати, наприклад, поля в різних одиницях, наприклад, € та $).

Показники автоматично генеруються з полів моделі; використовуються лише агреговані поля. Ці показники також відсортовані в алфавітному порядку в рядку поля.

Попередження

Подібно до графічного перегляду, зведена агрегує дані про вміст бази даних, що означає, що незбережені функціональні поля не можна використовувати в зведених представленнях

У зведеній таблиці field може мати атрибут widget, щоб диктувати його формат. Віджет має бути форматувальником полів, найбільш цікавими з яких є date, datetime, float_time і monetary.

Наприклад, зведену таблицю табеля можна визначити як:

<pivot string="Timesheet">
    <field name="employee_id" type="row"/>
    <field name="date" interval="month" type="col"/>
    <field name="unit_amount" type="measure" widget="float_time"/>
</pivot>

QWeb

Представлення QWeb - це стандартні Шаблони QWeb шаблони всередині архів представлення. Вони не мають певного кореневого елемента. Оскільки представлення QWeb не мають певного кореневого елемента, їхній тип має бути вказано явно (його не можна вивести з кореневого елемента поля arch).

Представлення QWeb мають два випадки використання:

  • їх можна використовувати як шаблони інтерфейсу, у цьому випадку template слід використовувати як ярлик.

  • їх можна використовувати як фактичні представлення qweb (відкриті всередині дії), у цьому випадку їх слід визначити як звичайні представлення з явним type (його не можна вивести) і моделлю.

Основні доповнення qweb-as-view до базового шаблону qweb-as-as:

  • qweb-as-view має особливий випадок для елемента <nav>, що несе клас CSS o_qweb_cp_buttons: його вміст має бути кнопками, його буде витягнуто та переміщено до області кнопок панелі керування, Сам <nav> буде видалено, це обхідний шлях для панелі керування, яка ще не існує

  • відтворення qweb-as-view додає кілька елементів до стандартного контексту відтворення qweb:

    model

    модель, до якої прив’язано представлення qweb

    domain

    домен, наданий у представленні пошуку

    context

    контекст, наданий пошуковим поданням

    records

    відкладений проксі для model.search(domain), це можна використовувати, якщо ви просто хочете повторювати записи, а не виконувати більш складні операції (наприклад, групування)

  • qweb-as-view також надає додаткові хуки візуалізації:

    • _qweb_prepare_context(view_id, domain) готує контекст відтворення, специфічний для qweb-as-view

    • qweb_render_view(view_id, domain) - це метод, який викликається клієнтом і викликає методи підготовки контексту та, зрештою, env['ir.qweb'].render().

Пошук за умовчанням

Поля пошуку та фільтри можна налаштувати через контекст дії за допомогою ключів search_default_name. Для полів значення має бути значенням, яке потрібно встановити в полі, для фільтрів це логічне значення або число. Наприклад, припустивши, що foo є полем, а bar є фільтром, контекст дії:

{
  'search_default_foo': 'acro',
  'search_default_bar': 1
}

автоматично ввімкне фільтр bar і здійснить пошук у полі foo acro.

Числове значення (від 1 до 99) можна використовувати для опису порядку груп за замовчуванням. Наприклад, якщо foo і bar посилаються на два groupby

{
  'search_default_foo': 2,
  'search_default_bar': 1
}

має ефект, щоб активувати спочатку bar, а потім foo.