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

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

Домени

Посилання: документацію щодо цієї теми можна знайти в Пошук доменів.

В 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: &lt; for < and &amp; for &. Other entity references (&gt;, &apos; & &quot;) are optional.

Example

<filter name="negative" domain="[('test_val', '&lt;', 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.