Файли даних

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

external identifier для цього запису. Настійно рекомендується надати його

  • для створення запису дозволяє наступним визначенням або змінювати, або посилатися на цей запис

  • для модифікації запису, запис для зміни

context

контекст для використання під час створення запису

forcecreate

у режимі оновлення, чи слід створювати запис, якщо він не існує

Потрібен external id, за замовчуванням True.

field

Кожен запис може складатися з тегів field, які визначають значення, які потрібно встановити під час створення запису. Запис без поля використовуватиме всі значення за замовчуванням (створення) або нічого не робитиме (оновлення).

field має обов’язковий атрибут name, назва поля, яке потрібно встановити, і різні методи визначення самого значення:

Нічого

якщо для поля не надано жодного значення, для поля буде встановлено неявний False. Можна використовувати, щоб очистити поле або уникнути використання значення за замовчуванням для поля.

search

для реляційні поля має бути домен на моделі поля.

Оцінить домен, здійснить пошук у моделі поля за його допомогою та встановить результат пошуку як значення поля. Використовуватиме лише перший результат, якщо поле є Many2one

ref

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

Переважно для полів Many2one і Reference

type

якщо надано атрибут type, він використовується для інтерпретації та перетворення вмісту поля. Вміст поля можна надати через зовнішній файл за допомогою атрибута file або через тіло вузла.

Доступні типи:

xml, html

витягує дочірні елементи field як єдиний документ, оцінює будь-який external 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), функцію для визначення external identifiers (ref) і об’єкт моделі для поточного поля, якщо застосовно (obj)

delete

Тег delete може видалити будь-яку кількість попередньо визначених записів. Він має такі атрибути:

model (обов’язково)

модель, у якій вказаний запис має бути видалено

id

external 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.asset

active (необов’язково)

вказує, чи активний актив

Примітка

Так само, як і у випадку з <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