Файли даних¶
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
(обов’язково)назва моделі для створення (або оновлення)
id
зовнішній ідентифікатор для цього запису. Настійно рекомендується надати його
для створення запису дозволяє наступним визначенням або змінювати, або посилатися на цей запис
для модифікації запису, запис для зміни
context
контекст для використання під час створення запису
forcecreate
у режимі оновлення, чи слід створювати запис, якщо він не існує
Потрібен зовнішній id, за замовчуванням
True
.
field
¶
Кожен запис може складатися з тегів field
, які визначають значення, які потрібно встановити під час створення запису. Запис
без поля
використовуватиме всі значення за замовчуванням (створення) або нічого не робитиме (оновлення).
field
має обов’язковий атрибут ``name`, назва поля, яке потрібно встановити, і різні методи визначення самого значення:
- Нічого
якщо для поля не надано жодного значення, для поля буде встановлено неявний
False
. Можна використовувати, щоб очистити поле або уникнути використання значення за замовчуванням для поля.search
для реляційні поля має бути домен на моделі поля.
Оцінить домен, здійснить пошук у моделі поля за його допомогою та встановить результат пошуку як значення поля. Використовуватиме лише перший результат, якщо поле є
Many2one
ref
якщо надано атрибут
ref
, його значення має бути дійсним зовнішнім id, який буде шукано та встановлено як значення поля.type
якщо надано атрибут
type
, він використовується для інтерпретації та перетворення вмісту поля. Вміст поля можна надати через зовнішній файл за допомогою атрибутаfile
або через тіло вузла.Доступні типи:
xml
,html
витягує дочірні елементи
поля
як єдиний документ, оцінює будь-який зовнішній id, указаний у формі%(external_id)s
.%%
можна використовувати для виведення фактичних знаків %.file
гарантує, що вміст поля є дійсним шляхом до файлу в поточній моделі, зберігає пару
module,path
як значення поляchar
встановлює вміст поля безпосередньо як значення поля без змін
base64
base64-кодує вміст поля, корисно в поєднанні з атрибутом
file
для завантаження, наприклад дані зображення у вкладенняхint
перетворює вміст поля на ціле число та встановлює його як значення поля
float
перетворює вміст поля на float та встановлює його як значення поля
list
,tuple
має містити будь-яку кількість елементів
value
з тими ж властивостями, що іfield
, кожен елемент перетворюється на елемент згенерованого кортежу або списку, а згенерована колекція встановлюється як значення поля
eval
у випадках, коли попередні методи непридатні, атрибут
eval
просто оцінює будь-який вираз Python, який він надає, і встановлює результат як значення поля.Контекст оцінювання містить різноманітні модулі (
time
,datetime
,timedelta
,relativedelta
), функцію для визначення зовнішніх ідентифікаторів (ref
) і об’єкт моделі для поточного поля, якщо застосовно (obj
)
delete
¶
Тег delete
може видалити будь-яку кількість попередньо визначених записів. Він має такі атрибути:
model
(обов’язково)модель, у якій вказаний запис має бути видалено
id
зовнішній 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
¶
Creates a QWeb view requiring only the arch
section of the view, and allowing a few optional attributes:
id
представлення зовнішній ідентифікатор
name
,inherit_id
,priority
те саме, що й відповідне поле в
ir.ui.view
(примітка:inherit_id
має бути зовнішнім ідентифікатором)primary
якщо встановлено значення
True
і поєднано зinherit_id
, визначає представлення як основнеgroups
розділений комами список груп зовнішніх ідентифікаторів
page
якщо встановлено значення
"True"
, шаблон є сторінкою веб-сайту (можна посилати, видалити)optional
Якщо атрибут
name
не вказано, намагається отримати назву меню з пов’язаної дії, якщо така є. В іншому випадку використовуєтьсяid
запису.
Файли даних CSV¶
Файли даних XML є гнучкими та описовими, але дуже багатослівними під час масового створення кількох простих записів однієї моделі.
У цьому випадку файли даних також можуть використовувати csv, це часто стосується прав доступу:
назва файлу
model_name.csv
перший рядок містить список полів для запису зі спеціальним полем
id
для зовнішніх ідентифікаторів (використовується для створення або оновлення)кожен наступний рядок створює новий запис
Ось перші рядки файлу даних, що визначають області країни 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 |
Для кожного рядка (запис):
перший стовпець - це зовнішній ідентифікатор запису, який потрібно створити або оновити
другий стовпець - зовнішній id об’єкта країни, з яким потрібно зв’язатися (об’єкти країни мають бути визначені заздалегідь)
третій стовпець – це поле
name
дляres.country.state
четвертий стовпець – поле
code
дляres.country.state