Файли даних¶
Odoo значною мірою керується даними, тому значна частина визначення модулів – це визначення різних записів, якими він керує: інтерфейс користувача (меню та представлення), безпека (права доступу та правила запису), звіти та звичайні дані – усе це визначається через записи .
Структура¶
Основним способом визначення даних в Odoo є файли даних XML. Загальна структура файлу даних XML така:
Будь-яка кількість операційних елементів у кореневому елементі
odoo
<?xml version="1.0" encoding="UTF-8"?>
<!-- the root elements of the data file -->
<odoo>
<operation/>
...
</odoo>
Файли даних виконуються послідовно, операції можуть посилатися лише на результат операцій, визначених раніше
Примітка
Якщо очікується, що вміст файлу даних буде застосовано лише один раз, ви можете вказати для прапора odoo noupdate значення 1. Якщо очікується, що частину даних у файлі буде застосовано один раз, ви можете розмістити цю частину файлу в домені <data noupdate=»1»>.
<odoo>
<data noupdate="1">
<!-- Only loaded when installing the module (odoo-bin -i module) -->
<operation/>
</data>
<!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
<operation/>
</odoo>
Основні операції¶
record¶
record належним чином визначає або оновлює запис бази даних, він має такі атрибути:
model(обов’язково)назва моделі для створення (або оновлення)
idexternal identifier для цього запису. Настійно рекомендується надати його
для створення запису дозволяє наступним визначенням або змінювати, або посилатися на цей запис
для модифікації запису, запис для зміни
contextконтекст для використання під час створення запису
forcecreateу режимі оновлення, чи слід створювати запис, якщо він не існує
Потрібен external id, за замовчуванням
True.
field¶
Кожен запис може складатися з тегів field, які визначають значення, які потрібно встановити під час створення запису. Запис без поля використовуватиме всі значення за замовчуванням (створення) або нічого не робитиме (оновлення).
field має обов’язковий атрибут name, назва поля, яке потрібно встановити, і різні методи визначення самого значення:
- Нічого
якщо для поля не надано жодного значення, для поля буде встановлено неявний
False. Можна використовувати, щоб очистити поле або уникнути використання значення за замовчуванням для поля.searchдля реляційні поля має бути домен на моделі поля.
Оцінить домен, здійснить пошук у моделі поля за його допомогою та встановить результат пошуку як значення поля. Використовуватиме лише перший результат, якщо поле є
Many2onerefякщо надано атрибут
ref, його значення має бути дійсним external id, який буде шукано та встановлено як значення поля.typeякщо надано атрибут
type, він використовується для інтерпретації та перетворення вмісту поля. Вміст поля можна надати через зовнішній файл за допомогою атрибутаfileабо через тіло вузла.Доступні типи:
xml,htmlвитягує дочірні елементи
fieldяк єдиний документ, оцінює будь-який external id, указаний у формі%(external_id)s.%%можна використовувати для виведення фактичних знаків %.fileгарантує, що вміст поля є дійсним шляхом до файлу в поточній моделі, зберігає пару
module,pathяк значення поляcharвстановлює вміст поля безпосередньо як значення поля без змін
base64base64-кодує вміст поля, корисно в поєднанні з атрибутом
fileдля завантаження, наприклад дані зображення у вкладенняхintперетворює вміст поля на ціле число та встановлює його як значення поля
floatперетворює вміст поля на float та встановлює його як значення поля
list,tupleмає містити будь-яку кількість елементів
valueз тими ж властивостями, що іfield, кожен елемент перетворюється на елемент згенерованого кортежу або списку, а згенерована колекція встановлюється як значення поля
evalу випадках, коли попередні методи непридатні, атрибут
evalпросто оцінює будь-який вираз Python, який він надає, і встановлює результат як значення поля.Контекст оцінювання містить різноманітні модулі (
time,datetime,timedelta,relativedelta), функцію для визначення external identifiers (ref) і об’єкт моделі для поточного поля, якщо застосовно (obj)
delete¶
Тег delete може видалити будь-яку кількість попередньо визначених записів. Він має такі атрибути:
model(обов’язково)модель, у якій вказаний запис має бути видалено
idexternal id запису для видалення
searchдомен для пошуку записів моделі для видалення
id і search є винятковими
function¶
Тег function викликає метод моделі з наданими параметрами. Він має два обов’язкові параметри model і name, що вказують відповідно модель і назву методу для виклику.
Параметри можна надати за допомогою елементів eval (має обчислювати послідовність параметрів для виклику методу) або елементів value (див. список значень).
<odoo>
<data noupdate="1">
<record id="partner_1" model="res.partner">
<field name="name">Odude</field>
</record>
<function model="res.partner" name="send_inscription_notice"
eval="[[ref('partner_1'), ref('partner_2')]]"/>
<function model="res.users" name="send_vip_inscription_notice">
<function eval="[[('vip','=',True)]]" model="res.partner" name="search"/>
</function>
</data>
<record id="model_form_view" model="ir.ui.view">
...
</record>
</odoo>
Скорочення¶
Оскільки деякі важливі структурні моделі Odoo є складними і багатогранними, файли даних надають коротші альтернативи їх визначенню за допомогою запис тегів:
template¶
Створює QWeb представлення, що вимагає лише розділ arch представлення та дозволяє кілька необов’язкових атрибутів:
idпредставлення external identifier
name,inherit_id,priorityте саме, що й відповідне поле в
ir.ui.view(примітка:inherit_idмає бути external identifier)primaryякщо встановлено значення
Trueі поєднано зinherit_id, визначає представлення як основнеgroupsрозділений комами список груп external identifiers
activeвказує, чи є представлення активним. Якщо воно неактивне, його правила XPath не застосовуватимуться, що, таким чином, головним чином стосується представлень з
inherit_idПримітка
Визначення значення
activeдля самого вузла<template>має тонкощі: воно враховується лише під час створення запису. Під час наступних оновлень представлення буде оновлено, але його статусactiveне зміниться.
asset¶
Створює asset.
Example
<asset id="website_something.some_style_asset" name="Some style asset" active="False">
<bundle>web.assets_frontend</bundle>
<path>website_something/static/src/some_style.scss</path>
</asset>
Атрибути
idактиви external identifier
nameте саме, що й відповідне поле в
ir.assetactive(необов’язково)вказує, чи активний актив
Примітка
Так само, як і у випадку з
<template>, визначення значенняactiveдля самого вузла<asset>має одну тонкощу: воно враховується лише під час створення запису. Під час наступних оновлень буде оновлено актив, але не його статусactive.
Дочірні елементи
<bundle>та<path>потрібно визначити відповідні поля в
ir.asset(полеdirectiveможна контролювати за допомогою атрибутаdirectiveдочірнього об’єкта<bundle>)<field>(необов’язково)як і у звичайному
<record>, щоб визначити більше значень полів за потреби
Файли даних CSV¶
Файли даних XML є гнучкими та описовими, але дуже багатослівними під час масового створення кількох простих записів однієї моделі.
У цьому випадку файли даних також можуть використовувати csv, це часто стосується прав доступу:
назва файлу
model_name.csvперший рядок містить список полів для запису зі спеціальним полем
idдля external identifiers (використовується для створення або оновлення)кожен наступний рядок створює новий запис
Ось перші рядки файлу даних, що визначають області країни res.country.state.csv
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
state_au_5,au,"South Australia","SA"
state_au_6,au,"Tasmania","TAS"
state_au_7,au,"Victoria","VIC"
state_au_8,au,"Western Australia","WA"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
state_us_5,us,"California","CA"
state_us_6,us,"Colorado","CO"
відображено у більш зручному для читання форматі:
id |
country_id:id |
name |
код |
|---|---|---|---|
state_au_1 |
au |
Australian Capital Territory |
ACT |
state_au_2 |
au |
New South Wales |
NSW |
state_au_3 |
au |
Northern Territory |
NT |
state_au_4 |
au |
Queensland |
QLD |
state_au_5 |
au |
South Australia |
SA |
state_au_6 |
au |
Tasmania |
TAS |
state_au_7 |
au |
Victoria |
VIC |
state_au_8 |
au |
Western Australia |
WA |
state_us_1 |
us |
Alabama |
AL |
state_us_2 |
us |
Alaska |
AK |
state_us_3 |
us |
Arizona |
AZ |
state_us_4 |
us |
Arkansas |
AR |
state_us_5 |
us |
California |
CA |
state_us_6 |
us |
Colorado |
CO |
Для кожного рядка (запис):
перший стовпець - це external id запису, який потрібно створити або оновити
другий стовпець - external id об’єкта країни, з яким потрібно зв’язатися (об’єкти країни мають бути визначені заздалегідь)
третій стовпець – це поле
nameдляres.country.stateчетвертий стовпець – поле
codeдляres.country.state