Файли даних

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, який буде шукано та встановлено як значення поля.

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

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