Переглянути записи¶
Представлення визначають, як записи повинні відображатися кінцевим користувачам. Вони вказані в XML та зберігаються як самі записи, тобто їх можна редагувати незалежно від моделей, які вони представляють. Вони гнучкі та дозволяють високий рівень налаштування екранів, якими вони керують. Існують різні типи представлень. Кожне з них представляє режим візуалізації: форма, список, канбан тощо.
Основна структура¶
Базові представлення зазвичай мають спільну мінімальну структуру, визначену нижче. Заповнювачі позначені великими літерами.
<record id="ADDON.MODEL_view_TYPE" model="ir.ui.view">
<field name="name">NAME</field>
<field name="model">MODEL</field>
<field name="arch" type="xml">
<VIEW_TYPE>
<views/>
</VIEW_TYPE>
</field>
</record>
Типи представлення¶
- Форма
Відображати та редагувати дані з одного запису.
- Список
Перегляд та редагування кількох записів.
- Пошук
Застосуйте фільтри та виконайте пошук. Результати відображаються у поточному списку, канбан… поданні.
- Канбан
Відображати записи як «картки», які можна налаштувати як невеликий шаблон.
- Qweb
Шаблони звітності, вебсайту…
- Графік
Візуалізуйте агрегації за кількома записами або групами записів.
- Зведена таблиця
Відображати агрегації у вигляді зведена таблиця.
- Календар
Відображати записи як події у щоденному, щотижневому, щомісячному або щорічному календарі.
- Когорта Enterprise feature
Відобразити та зрозуміти, як деякі дані змінюються протягом певного періоду часу.
- Гант Enterprise feature
Відображати записи у вигляді діаграми Ганта.
- Сітка Enterprise feature
Відображають обчислену інформацію в числових комірках; їх важко налаштувати.
- Карта Enterprise feature
Відображати записи на карті та маршрути між ними.
Поля¶
Перегляд записів відображає кілька полів.
- class odoo.addons.base.models.ir_ui_view.View[source]¶
- name¶
Корисний лише як мнемоніка/опис представлення під час пошуку його у певному списку. Більшість назв представлень Odoo починаються з назви доповнення та закінчуються типом представлення, що обговорюється.
- вимога
Необов’язково
- тип
- arch¶
Опис макета представлення залежно від тип представлення.
- вимога
Необов’язково
- тип
- groups_id¶
Групи, яким дозволено використовувати/доступ до поточного перегляду.
Якщо представлення розширює існуюче представлення, розширення буде застосовано лише для певного користувача, якщо цей користувач має доступ до наданого
groups_id.- вимога
Необов’язково
- тип
Many2many->Groups
- priority¶
Під час запиту представлення із зазначенням
modelтаtypeповертається відповідне представлення з найнижчим пріоритетом (це представлення за замовчуванням).Він також визначає порядок застосування представлень під час роздільна здатність представлення. Коли представлення запитується за допомогою
id, а його режим не єprimary, зіставляється його найближчий батьківський об’єкт зmode=primary.- вимога
Необов’язково
- тип
- inherit_id¶
Посилання на батьківський вигляд, до якого буде застосовано inheritance. Його значення використовується за замовчуванням. Вкажіть батьківське представлення за допомогою атрибута
refзref="ADDON.MODEL_parent_view_TYPE".Назва доповнення (перед крапкою) не є обов’язковою, якщо успадкування виконується для запису того самого модуля.
Див. Спадкування для отримання додаткової інформації.
- вимога
Необов’язково
- тип
- mode¶
Застосовується лише якщо це представлення успадковується від іншого (встановлено
inherit_id).- extension¶
Якщо запитується представлення, шукається найближче первинне представлення (через
inherit_id). Потім застосовуються всі представлення, що успадковуються від нього, з моделлю цього представлення.
- primary¶
Найближчий первинне представлення повністю вирішується (навіть якщо він використовує модель, відмінну від поточної). Потім застосовуються специфікації успадкування, і результат використовується так, ніби це фактична арка цього вигляду.
Випадок, коли потрібно перевизначити
modeпід час використанняinherit_id, - це делегування успадкування. У цьому випадку ваша похідна модель відокремлена від батьківської, і представлення, що збігаються з одним, не збігатимуться з іншим. Припускаючи, що ви успадковуєте від представлення, пов’язаного з батьківською моделлю, і хочете налаштувати похідне представлення для відображення даних з похідної моделі,modeпохідного представлення потрібно встановити наprimary, оскільки це базове (і, можливо, єдине) представлення для цієї похідної моделі. В іншому випадку правила зіставлення представлень не застосовуватимуться.Див. Спадкування для отримання додаткової інформації.
- вимога
Необов’язково
- тип
Selection:extension/primary- Default
extension
Примітка
Поточний контекст і права доступу користувача також можуть впливати на можливості перегляду.
Спадкування¶
Успадкування дозволяє налаштовувати надані представлення. Це дає змогу, наприклад, додавати контент під час встановлення модулів або надавати різні відображення відповідно до дії.
Успадковувані представлення зазвичай мають спільну структуру, визначену нижче. Заповнювачі позначені великими літерами. Це синтетичне представлення оновлюватиме вузол, на який спрямований XPath, та інший, на який спрямований його назву та атрибути.
<record id="ADDON.MODEL_view_TYPE" model="ir.ui.view">
<field name="model">MODEL</field>
<field name="inherit_id" ref="VIEW_REFERENCE"/>
<field name="mode">MODE</field>
<field name="arch" type="xml">
<xpath expr="XPATH" position="POSITION">
<CONTENT/>
</xpath>
<NODE ATTRIBUTES="VALUES" position="POSITION">
<CONTENT/>
</NODE>
</field>
</record>
Поля inherit_id та mode визначають роздільну здатність роздільна здатність представлення. Елементи xpath або NODE вказують на специфікації успадкування. Атрибути expr та position вказують на позицію послідовність успадкування.
Роздільна здатність перегляду¶
Роздільна здатність генерує остаточну arch для запитуваного/збігного primary представлення наступним чином:
якщо представлення має батьківський об’єкт, батьківський об’єкт повністю вирішується, тоді застосовуються специфікації успадкування поточного представлення;
якщо представлення не має батьківського елемента, його
archвикористовується як є;дочірні поточного виду з режимом
extensionшукаються, і їх специфікації успадкування застосовуються за глибиною (спочатку застосовується дочірнє представлення, потім його дочірні, потім його брати і сестри).
Успадкування застосовується відповідно до поля inherit_id. Якщо кілька записів представлень успадковують одне й те саме представлення, порядок визначається priority.
Результат застосування дочірніх представлень дає остаточну arch.
Специфікації успадкування¶
Специфікації успадкування застосовуються послідовно та складаються з:
локатор елементів для збігу з успадкованим елементом у батьківському представленні;
дочірній елемент для зміни успадкованого елемента.
Існує три типи локаторів елементів:
Елемент
xpathз атрибутомexpr.expr- це вираз XPath 1, застосований до поточноїarch, що відповідає першому знайденому вузлу;Елемент
fieldз атрибутомname, що відповідає першому полю з тим самимname.Примітка
Усі інші атрибути ігноруються.
Будь-який інший елемент, що відповідає першому елементу з тим самим
nameта ідентичними атрибутами.Примітка
Атрибути
positionтаversionігноруються.
- 1
Для спрощення зіставлення у представленнях QWeb додано функцію розширення:
hasclass(*classes)збігається, якщо вузол контексту містить усі зазначені класи.
Example
<xpath expr="page[@name='pg']/group[@name='gp']/field" position="inside">
<field name="description"/>
</xpath>
<div name="name" position="replace">
<field name="name2"/>
</div>
Позиція спадкування¶
Специфікації успадкування приймають необов’язковий атрибут position, за замовчуванням inside, який визначає, як слід модифікувати вузол, що відповідає заданій позиції.
- inside¶
Вміст специфікації успадкування додається до відповідного вузла.
Example
<notebook position="inside"> <page string="New feature"> ... </page> </notebook>
- after¶
Вміст специфікації успадкування додається до батьківського вузла, що відповідає, після вузла, що відповідає.
Example
<xpath expr="//field[@name='x_field']" position="after"> <field name="x_other_field"/> </xpath>
- before¶
Вміст специфікації успадкування додається до батьківського вузла, що відповідає, перед самим вузлом, що відповідає.
Example
<field name=x_field" position="before"> <field name="x_other_field"/> </field>
- replace¶
Вміст специфікації успадкування замінює вузол, що відповідає заданій таблицею. Будь-який текстовий вузол, що містить лише
$0у вмісті специфікації, замінюється копією вузла, що відповідає заданій таблицею, фактично обгортаючи вузол, що відповідає заданій таблицею.Example
<xpath expr="//field[@name='x_field']" position="replace"> <div class="wrapper"> $0 </div> </xpath>
- attributes¶
Вміст специфікації успадкування має складатися лише з елементів
attribute, кожен з яких має атрибутnameта необов’язкове тіло.Якщо елемент
attributeмає тіло, до відповідного вузла додається новий атрибут з назвоюname, а значенням елементаattributeє текст.Якщо елемент
attributeне має тіла, атрибут, названий після йогоname, видаляється зі збігаючогося вузла.Якщо елемент
attributeмає атрибутadd, атрибутremoveабо обидва, значення атрибута відповідного вузла, названого післяname, перераховується для врахування значення(й)add,removeта необов’язкового атрибутаseparator, який за замовчуванням має значення,.addвключає своє(ї) значення(я), розділеніseparator.removeвидаляє своє(ї) значення(я), розділеніseparator.
Example
<field name="x_field" position="attributes"> <attribute name="invisible">True</attribute> <attribute name="class" add="mt-1 mb-1" remove="mt-2 mb-2" separator=" "/> </field>
- move¶
Атрибут
position="move"встановлюється для вмісту специфікації успадкування, щоб вказати, як вузли переміщуються відносно локатора елементів специфікації успадкування, для якого також має бути встановлено атрибутpositionзі значеннямиinside,replace,afterабоbefore.Example
<xpath expr="//@target" position="after"> <xpath expr="//@node" position="move"/> </xpath> <field name="target_field" position="after"> <field name="my_field" position="move"/> </field>
Модель commons¶
- class odoo.addons.base.models.ir_ui_view.View[source]
- Model.get_views(views, options=None)¶
Повертає значення fields_views заданих представлень, а також поля поточної моделі та, за бажанням, її фільтри для заданої дії.
Повернення методу може залежати лише від запитуваних типів представлень, прав доступу (представлення чи інші записи), правил доступу до представлень, опцій, мови контексту та TYPE_view_ref (інші значення контексту використовувати не можна).
Вирази Python, що містяться у представленнях або представляють домени (у полях Python), будуть оцінюватися клієнтом з усіма значеннями контексту, а також значеннями записів, які він має.
- Параметри
views – список [view_id, view_type]
options (dict) – необов’язкові логічні прапорці словника, встановлені на увімкнення:
toolbarвключає контекстні дії під час завантаження fields_viewsload_filtersповертає фільтри моделіaction_idідентифікатор дії для отримання фільтрів, інакше завантажує глобальні фільтри або модель
- Повертає
словник з fields_views, полями та, за бажанням, фільтрами
- Model.get_view([view_id | view_type='form'])¶
Отримати детальний склад запитуваного представлення, наприклад, модель, архітектуру представлення.
Повернення методу може залежати лише від запитуваних типів представлень, прав доступу (представлення чи інші записи), правил доступу до представлень, опцій, мови контексту та TYPE_view_ref (інші значення контексту використовувати не можна).
- Параметри
view_id (int) – id представлення або None
view_type (str) – тип представлення для повернення, якщо view_id дорівнює None („form“, „tree“, …)
options (dict) – логічні параметри для повернення додаткових функцій: - boolean mobile: true, якщо веб-клієнт наразі використовує адаптивний мобільний вигляд (для використання канбан-представлення замість спискового представлення для полів x2many)
- Повертає
склад запитаного представлення (включаючи успадковані представлення та розширення)
- Тип повернення
- Викликає
якщо успадковане подання має невідому позицію для роботи, крім „before“, „after“, „inside“, „replace“
якщо в батьківському представленні знайдено тег, відмінний від „position“
Invalid ArchitectureError – якщо для структури визначено тип представлення, відмінний від форми, дерева, календаря, пошуку тощо…