Chapter 6: Basic Views¶
We have seen in the previous chapter that Odoo is able to generate default views for a given model. In practice, the default view is never acceptable for a business application. Instead, we should at least organize the various fields in a logical manner.
Представлення визначаються у файлах XML із діями та меню. Вони є екземплярами моделі ir.ui.view
.
У нашому модулі нерухомості нам потрібно організувати поля логічно:
у списку (дереві) ми хочемо відображати більше, ніж просто назву.
у представленні форми поля мають бути згруповані.
у представленні пошуку ми повинні мати можливість шукати не лише за назвою. Зокрема, нам потрібен фільтр для властивостей „Доступні“ та властивість для групування за поштовим індексом.
Список¶
Reference: the documentation related to this topic can be found in Список.
Примітка
Ціль: у кінці цього розділу представлення списку має виглядати так:

Представлення списку, також звані представленням дерева, відображають записи в табличній формі.
Їх кореневим елементом є <tree>
. Найпростіша версія цього подання просто містить список усіх полів для відображення в таблиці (де кожне поле є стовпцем):
<tree string="Tests">
<field name="name"/>
<field name="last_seen"/>
</tree>
Простий приклад можна знайти тут.
Exercise
Додайте настроюване представлення списку.
Визначте представлення списку для моделі estate.property
у відповідному файлі XML. Перевірте Ціль цього розділу, щоб відобразити поля.
Поради:
не додавайте атрибут
editable="bottom"
, який ви можете знайти у прикладі вище. Ми повернемося до цього пізніше.деякі мітки полів можуть знадобитися адаптувати для відповідності посиланню.
Як завжди, вам потрібно перезапустити сервер (не забудьте опцію -u
) і оновити браузер, щоб побачити результат.
Попередження
Ймовірно, ви використаєте копіювання та вставлення в цьому розділі, тому завжди переконайтеся, що id
залишається унікальним для кожного представлення!
Форма¶
Reference: the documentation related to this topic can be found in Форма.
Примітка
Ціль: у кінці цього розділу представлення списку має виглядати так:

Форми використовуються для створення та редагування окремих записів.
Їх кореневим елементом є <form>
. Вони складаються з елементів структури високого рівня (груп і блокнотів) та інтерактивних елементів (кнопок і полів):
<form string="Test">
<sheet>
<group>
<group>
<field name="name"/>
</group>
<group>
<field name="last_seen"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description"/>
</page>
</notebook>
</sheet>
</form>
Можна використовувати звичайні HTML-теги, такі як div
і h1
, а також атрибут class
(Odoo надає деякі вбудовані класи), щоб точно налаштувати вигляд.
Простий приклад можна знайти тут.
Exercise
Додайте настроюване представлення форми.
Визначте представлення форми для моделі estate.property
у відповідному файлі XML. Перевірте Ціль цього розділу для очікуваного остаточного дизайну сторінки.
Для цього може знадобитися спроба й помилка, перш ніж ви отримаєте очікуваний результат ;-) Радимо додавати поля та теги по одному, щоб зрозуміти, як це працює.
Щоб уникнути перезапуску сервера кожного разу, коли ви робите модифікацію у представленні, може бути зручно використовувати параметр --dev xml
під час запуску сервера:
$ ./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate --dev xml
Цей параметр дозволяє вам просто оновити сторінку, щоб переглянути зміни представлення.
Пошук¶
Reference: the documentation related to this topic can be found in Пошук.
Примітка
Ціль: наприкінці цього розділу вигляд пошуку має виглядати так:



Search views are slightly different from the list and form views since they don’t display content. Although they apply to a specific model, they are used to filter other views“ content (generally aggregated views such as Список). Beyond the difference in use case, they are defined the same way.
Їх кореневим елементом є <search>
. Найпростіша версія цього представлення просто містить список усіх полів, для яких потрібне ярлик:
<search string="Tests">
<field name="name"/>
<field name="last_seen"/>
</search>
Представлення пошуку за замовчуванням, згенерований Odoo, надає ярлик для фільтрування за name
. Дуже поширеним є додавання полів, які користувач, імовірно, відфільтрує у налаштованому представленні пошуку.
Exercise
Додайте спеціальне представлення пошуку.
Визначте представлення пошуку для моделі estate.property
у відповідному файлі XML. Перегляньте список полів на першому зображенні Цілі цього розділу.
Після перезапуску сервера має бути доступна фільтрація за вказаними полями.
Представлення пошуку також можуть містити елементи <filter>
, які діють як перемикачі для попередньо визначених пошуків. Фільтри повинні мати один із таких атрибутів:
domain
: додає заданий домен до поточного пошукуcontext
: додає деякий контекст до поточного пошуку; використовує ключgroup_by
для групування результатів за вказаною назвою поля
Простий приклад можна знайти тут.
Перш ніж продовжувати вправу, необхідно представити концепцію „domain“.
Домени¶
Посилання: документацію щодо цієї теми можна знайти в Пошук доменів.
В Odoo домен кодує умови щодо записів: домен - це список критеріїв, які використовуються для вибору підмножини записів моделі. Кожен критерій є трійкою з назва поля, оператор і значення. Запис задовольняє критерій, якщо вказане поле відповідає умові оператора, застосованого до значення.
Наприклад, при використанні в моделі Продукт наступний домен вибирає всі послуги з ціною за одиницю понад 1000:
[('product_type', '=', 'service'), ('unit_price', '>', 1000)]
За замовчуванням критерії поєднуються з неявним І, що означає, що кожен критерій має бути виконано, щоб запис відповідав домену. Логічні оператори &
(AND), |
(OR) і !
(NOT) можна використовувати для явного об’єднання критеріїв. Вони використовуються в позиції префікса (оператор вставляється перед його аргументами, а не між ними). Наприклад, щоб вибрати продукти, „які є послугами OR мають ціну за одиницю NOT від 1000 до 2000“:
['|',
('product_type', '=', 'service'),
'!', '&',
('unit_price', '>=', 1000),
('unit_price', '<', 2000)]
Примітка
XML does not allow <
and &
to be used inside XML
elements. To avoid parsing errors, entity references should be used:
<
for <
and &
for &
. Other entity references
(>
, '
& "
) are optional.
Example
<filter name="negative" domain="[('test_val', '<', 0)]"/>
Exercise
Додайте фільтр і групуйте за.
До попередньо створеного представлення пошуку слід додати наступне:
фільтр, який відображає доступні властивості, тобто стан має бути „Новий“ або „Отримана пропозиція“.
можливість групувати результати за індексом.
Looking good? At this point we are already able to create models and design a user interface which makes sense business-wise. However, a key component is still missing: the link between models.