Chapter 5: Finally, Some UI To Play With¶
Now that we’ve created our new model and its corresponding access rights, it is time to interact with the user interface.
Наприкінці цієї глави ми створимо кілька меню для доступу до типового списку та представленні форми.
Файли даних (XML)¶
Довідка: документацію, пов’язану з цією темою, можна знайти в Файли даних.
In Chapter 4: Security - A Brief Introduction, we added data through a CSV file. The CSV format is convenient when the data to load has a simple format. When the format is more complex (e.g. load the structure of a view or an email template), we use the XML format. For example, this help field contains HTML tags. While it would be possible to load such data through a CSV file, it is more convenient to use an XML file.
XML-файли мають бути додані до тих самих папок, що й CSV-файли, і визначені подібним чином у __manifest__.py
. Вміст файлів даних також послідовно завантажується під час встановлення або оновлення модуля, тому всі зауваження, зроблені для файлів CSV, справедливі для файлів XML. Коли дані пов’язані з представленнями, ми додаємо їх до папки views
.
In this chapter, we will load our first action and menus through an XML file. Actions and menus are standard records in the database.
Примітка
Коли важлива продуктивність, перевага віддається формату CSV перед форматом XML. Це стосується Odoo, де завантаження файлу CSV відбувається швидше, ніж завантаження файлу XML.
В Odoo інтерфейс користувача (дії, меню та представлення) значною мірою визначається створенням і створенням записів, визначених у файлі XML. Загальний шаблон - Меню > Дія > Представлення. Для доступу до записів користувач переміщається по декількох рівнях меню; найглибший рівень - це дія, яка запускає відкриття списку записів.
Дії¶
Reference: the documentation related to this topic can be found in Дії.
Примітка
Ціль: наприкінці цього розділу дія має бути завантажена в систему. Ми ще нічого не побачимо в інтерфейсі користувача, але файл має бути завантажено в журнал:
INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml
Дії можна запустити трьома способами:
натисканням пунктів меню (пов’язаних із певними діями)
натисканням кнопок у поданнях (якщо вони пов’язані з діями)
як контекстні дії на об’єкт
We will only cover the first case in this chapter. The second case will be covered in a
later chapter while the last is the focus of an
advanced topic. In our Real Estate example, we would like to link a menu to the estate.property
model, so we are able to create a new record. The action can be viewed as the link between the menu
and the model.
Базовою дією для нашої test_model
є наступне:
<record id="test_model_action" model="ir.actions.act_window">
<field name="name">Test action</field>
<field name="res_model">test_model</field>
<field name="view_mode">tree,form</field>
</record>
id
є зовнішнім ідентифікатором. Його можна використовувати для посилання на запис (не знаючи його ідентифікатора в базі даних).model
має фіксоване значенняir.actions.act_window
(Дії вікна (ir.actions.act_window)).name
- це назва дії.res_model
- це модель, до якої застосовується дія.view_mode
are the views that will be available; in this case they are the list (tree) and form views. We’ll see later that there can be other view modes.
Приклади можна знайти всюди в Odoo, але цей є хорошим прикладом простої дії. Зверніть увагу на структуру файлу даних XML, оскільки він знадобиться вам у наступній вправі.
Exercise
Додайте дію.
Створіть файл estate_property_views.xml
у відповідній папці та визначте його у файлі __manifest__.py
.
Створіть дію для моделі estate.property
.
Перезапустіть сервер, і ви побачите завантажений файл у журналі.
Поля, атрибути та представлення¶
Примітка
Ціль: у кінці цього розділу ціна продажу має бути лише для читання, а кількість спалень і дата доступності мають мати значення за замовчуванням. Крім того, значення продажної ціни та дати доступності не копіюватимуться, якщо запис буде дубльовано.

Зарезервовані поля active
і state
додаються до моделі estate.property
.
Поки що ми використовували лише загальний вигляд для наших оголошень про нерухомість, але в більшості випадків ми хочемо налаштувати представлення. У Odoo є багато можливих тонких налаштувань, але зазвичай першим кроком є переконатися, що:
деякі поля мають значення за замовчуванням
деякі поля доступні лише для читання
деякі поля не копіюються при дублюванні запису
У нашому бізнесі з нерухомістю ми хотіли б наступного:
Ціна продажу має бути лише для читання (вона буде автоматично заповнена пізніше)
При дублюванні запису не слід копіювати дату наявності та продажну ціну
За замовчуванням має бути 2 спальні
Стандартна дата доступності має бути через 3 місяці
Деякі нові атрибути¶
Перш ніж рухатися далі з дизайном перегляду, давайте повернемося до визначення нашої моделі. Ми побачили, що деякі атрибути, такі як required=True
, впливають на схему таблиці в базі даних. Інші атрибути впливатимуть на перегляд або забезпечуватимуть значення за замовчуванням.
Exercise
Додайте нові атрибути до полів.
Знайдіть відповідні атрибути (див. Field
), щоб:
установіть ціну продажу лише для читання
запобігти копіюванню дати наявності та значень продажної ціни
Перезапустіть сервер і оновіть браузер. Ви не зможете встановлювати будь-які продажні ціни. Під час дублювання запису дата доступності має бути порожньою.
Значення по замовчуванню¶
Будь-якому полю можна надати значення за умовчанням. У визначенні поля додайте опцію default=X
, де X
є значенням літералу Python (логічне значення, ціле число, число з плаваючою точкою, рядок) або функцією, яка приймає модель і повертає значення:
name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now)
Поле name
матиме значення „Unknown“ за замовчуванням, тоді як поле last_seen
буде встановлено як поточний час.
Exercise
Встановіть значення за замовчуванням.
Додайте відповідні атрибути за замовчуванням, щоб:
стандартна кількість спалень - 2
за замовчуванням дата доступності через 3 місяці
Порада: це може вам допомогти: today()
Переконайтеся, що значення за замовчуванням встановлено належним чином.
Зарезервовані поля¶
Довідка: документацію, пов’язану з цією темою, можна знайти в Зарезервовані назви полів.
Кілька назв полів зарезервовано для попередньо визначеної поведінки. Вони повинні бути визначені в моделі, коли потрібна відповідна поведінка.
Exercise
Додати активне поле.
Додайте поле active
до моделі estate.property
.
Перезапустіть сервер, створіть нову властивість, а потім поверніться до списку… Властивість не буде в списку! active
є прикладом зарезервованого поля з особливою поведінкою: коли запис має active=False
, він автоматично видаляється з будь-якого пошуку. Щоб відобразити створену властивість, вам потрібно буде спеціально шукати неактивні записи.

Exercise
Установіть значення за умовчанням для активного поля.
Встановіть відповідне значення за умовчанням для поля active
, щоб воно більше не зникало.
Зауважте, що значення за умовчанням active=False
було призначено всім існуючим записам.
Exercise
Додайте поле стану.
Додайте поле state
до моделі estate.property
. Можливі п’ять значень: нова, пропозиція отримана, пропозиція прийнята, продана та скасована. Він має бути обов’язковим, його не можна копіювати та мати стандартне значення „Новий“.
Переконайтеся, що використовуєте правильний тип!
state
буде використано пізніше для кількох покращень інтерфейсу користувача.
Now that we are able to interact with the UI thanks to the default views, the next step is obvious: we want to define our own views.
- 1
Потрібне оновлення, оскільки веб-клієнт зберігає кеш різних меню та представлень з міркувань продуктивності.