Розділ 6: Основні представлення¶
У попередній розділ ми бачили, що 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>
</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
Цей параметр дозволяє вам просто оновити сторінку, щоб переглянути зміни представлення.
Пошук¶
Посилання: документацію з цієї теми можна знайти за адресою Пошук.
Примітка
Ціль: наприкінці цього розділу вигляд пошуку має виглядати так:
Представлення пошуку дещо відрізняються від представлень списку та форми, оскільки вони не відображають вміст. Хоча вони застосовуються до певної моделі, вони використовуються для фільтрації вмісту інших представлень (зазвичай агрегованих представлень, таких як Список). Окрім різниці у варіантах використання, вони визначаються однаково.
Їх кореневим елементом є <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 не дозволяє використовувати < та & всередині елементів XML. Щоб уникнути помилок парсингу, слід використовувати посилання на сутності: < для < та & для &. Інші посилання на сутності (>, ' та ") є необов’язковими.
Example
<filter name="negative" domain="[('test_val', '<', 0)]"/>
Exercise
Додайте фільтр і групуйте за.
До попередньо створеного представлення пошуку слід додати наступне:
фільтр, який відображає доступні властивості, тобто стан має бути „Новий“ або „Отримана пропозиція“.
можливість групувати результати за індексом.
Виглядає добре? На цьому етапі ми вже можемо створювати моделі та розробляти інтерфейс користувача, який має сенс з точки зору бізнесу. Однак ключового компонента все ще бракує: зв’язок між моделями.