Розділ 7: Основні представлення¶
У попередньому розділі ми бачили, що Odoo може генерувати представлення за замовчуванням для даної моделі. На практиці представлення за замовчуванням ніколи не є прийнятним для бізнес-додатків. Натомість ми повинні принаймні організувати різні поля логічно.
Представлення визначаються у файлах XML із діями та меню. Вони є екземплярами моделі ir.ui.view
.
У нашому модулі нерухомості нам потрібно організувати поля логічно:
у списку (дереві) ми хочемо відображати більше, ніж просто назву.
у представленні форми поля мають бути згруповані.
у представленні пошуку ми повинні мати можливість шукати не лише за назвою. Зокрема, нам потрібен фільтр для властивостей „Доступні“ та властивість для групування за поштовим індексом.
Список¶
Довідка: документацію, пов’язану з цією темою, можна знайти в Файли даних.
Примітка
Ціль: у кінці цього розділу представлення списку має виглядати так:

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

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



Представлення пошуку дещо відрізняється від представлення списку та форми, оскільки вони не відображають вмісту. Хоча вони застосовуються до певної моделі, вони використовуються для фільтрації вмісту інших представлень (зазвичай агрегованих представлень, таких як Список). Окрім різниці у варіантах використання, вони визначаються однаково.
Їх кореневим елементом є <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)]
Exercise
Додайте фільтр і групуйте за.
До попередньо створеного представлення пошуку слід додати наступне:
фільтр, який відображає доступні властивості, тобто стан має бути „Новий“ або „Отримана пропозиція“.
можливість групувати результати за індексом.
Виглядає гарно? На цьому етапі ми вже можемо створювати моделі та розробляти інтерфейс користувача, який має сенс з точки зору бізнесу. Однак ключовий компонент все ще відсутній: посилання між моделями.