• odoo官方文档第二章 Data Files


    Data Files

    Odoo是数据驱动的,因此模块定义的很大一部分是它管理的各种记录的定义:UI(菜单和视图),安全性(访问权限和访问规则),报告和普通数据都是通过记录定义的。

    结构(Structure)

    在Odoo中定义数据的主要方法是通过XML数据文件:XML数据文件的广泛结构如下:

    • 任意数量的操作元素都包含在根元素odoo中
    <!-- the root elements of the data file -->
    <odoo>
      <operation/>
      ...
    </odoo>
    

    数据文件是按顺序执行的,操作只能引用前面定义的操作的结果

    核心操作(Core operations)

    record

    record适当地定义或更新数据库记录,它具有以下属性:

    model(required)

    创建(或更新)模型的名称

    id

    这个记录的外部标识符。强烈建议提供一个

    • 对于记录创建,允许随后的定义修改或引用该记录
    • 对于记录修改,修改的记录

    context

    创建记录时使用的context

    forcecreate

    在更新模式下,是否应该创建记录,如果它不存在
    需要一个外部id,默认为True。

    field

    每个记录可以由field标记组成,定义在创建记录时设定的值。没有fieldrecord将使用所有默认值(创建)或什么都不做(更新)。

    一个field有一个强制性的name属性,要设置的字段的名称,以及定义值本身的各种方法:

    Nothing
    如果该字段没有提供任何值,则在字段中设置隐式False。可以用来清除字段,或者避免使用字段的默认值。

    对于关系字段,应该是字段模型上的域。

    将对域进行评估,使用它搜索字段的模型,并将搜索结果设置为字段的值。只有当字段是Many2one时才会使用第一个结果

    ref

    如果提供了ref属性,它的值必须是一个有效的外部id,它将被查找并设置为字段的值。

    主要是为Many2oneReference字段。

    type

    如果提供了type属性,它将用于解释和转换字段的内容。该字段的内容可以通过使用file属性的外部文件或通过节点的body来提供。

    可用的类型如下:

    xmlhtml

    提取字段的子field作为单个文档,评估包含表单%(external_id)s.%%指定的任何external id可以用来输出实际的%符号。

    file

    确保field内容在当前模型中是一个有效的文件路径,保存成对的module,path作为字段值

    char

    将字段内容直接设置为字段的值,无需修改

    base64

    base64编码了字段的内容,与file属性相结合,将图像数据加载到附件中

    int

    将字段的内容转换为整数并将其设置为字段的值

    float

    将字段的内容转换为浮点数并将其设置为字段的值

    listtuple

    应该包含任意数量的value元素,具有与field相同的属性,每个元素都解析为一个生成的tuple或list的项目,生成的收藏品被设置为字段的值

    eval

    对于以前的方法不合适的情况,eval属性简单地评估它所提供的Python表达式,并将结果设置为字段的值。

    评估context包含的各种模块(time, datetime, timedelta, relativedelta),在适用的情况下(obj)为当前字段解析外部标识符(ref)和模型对象的函数

    delete

    delete标签可以删除以前定义的任意数量的记录。它具有以下属性:

    model(required)

    指定记录应该被删除的模型

    id

    要删除记录的外部id

    search

    一个domain来查找要删除模型的记录

    idsearch是专有的

    function

    function标签在模型上调用一个方法,并提供了参数。它有两个强制参数modelname,分别指定了要调用的方法的模型和名称。

    参数可以使用eval(应该对调用该方法的一系列参数进行评估)或value元素(见list值)。

    Shortcuts

    由于Odoo的一些重要结构模型很复杂且涉及,因此数据文件提供了使用记录标记定义它们的更短替代方法:

    定义了一个ir.ui.menu记录有许多默认值和后退:

    Parent menu

    • 如果设置了父属性,则它应该是另一个菜单项的外部id,用作新项的父项
    • 如果未提供父级,则尝试将name属性解释为/ -separated菜单名称序列,并在菜单层次结构中查找位置。 在该解释中,自动创建中间菜单
    • 否则菜单被定义为“顶级”菜单项(不是没有父项的菜单)

    如果未指定name属性,则尝试从链接的操作中获取菜单名称(如果有)。 否则使用记录的id

    Groups

    groups属性被解释为res.groups模型的逗号分隔的外部标识符序列。 如果外部标识符以减号( - )为前缀,则该组将从菜单的组中删除

    action

    如果指定的话,action属性应该是在菜单打开时执行的动作的外部id

    id

    菜单项的外部id

    template

    创建一个只需要视图的arch部分的QWeb view,并允许一些可选属性:

    name, inherit_id, priority

    ir.ui.view上的相应字段相同(nb:inherit_id应该是外部标识符)

    primary

    如果设置为True并与inherit_id结合,则将视图定义为主要视图

    groups

    以逗号分隔的组外部标识符列表

    page

    如果设置为“True”,则模板为网站页面(可链接,可删除)

    optional

    enabled还是disabled,是否可以禁用视图(在网站界面中)及其默认状态。 如果未设置,则始终启用视图。

    CSV data files

    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(必须事先定义国家/地区对象)
    • 第三列是res.country.statename字段
    • 第四列是res.country.statecode字段
  • 相关阅读:
    CentOS7.4安装Docker
    责任链模式
    策略模式
    状态模式
    解释器模式
    备忘录模式
    中介者模式
    观察者模式
    迭代器模式
    private、default、protected和public的作用域
  • 原文地址:https://www.cnblogs.com/myt2000/p/9506121.html
Copyright © 2020-2023  润新知