odoo之Data Files

概念

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

Structure

在Odoo中定义数据的主要方法是通过XML数据文件:XML数据文件的广泛结构如下:
根元素odo中任意数量的操作元素

<!-- the root elements of the data file -->
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
  <operation/>
  ...
</odoo>

数据文件按顺序执行,操作只能引用前面定义的操作结果
注:
如果数据文件的内容预计只应用一次,您可以指定odo标志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>
Core operations
  • record
    记录适当地定义或更新数据库记录,它具有以下属性:

    • model (必须)
      要创建(或更新)的模型名称

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

      • 对于记录创建,允许后续定义修改或引用此记录

      • 对于记录修改,要修改的记录

    • context
      创建记录时使用的上下文

    • forcecreate
      在更新模式下,如果记录不存在,是否应该创建它

      需要一个外部id,默认为True。

  • field
    每条记录都可以由字段标签组成,定义创建记录时要设置的值。没有字段的记录将使用所有默认值(创建)或不执行任何操作(更新)。
    字段具有强制名称属性、要设置的字段名称以及定义值本身的各种方法:

    Nothing
    如果没有为该字段提供值,则将在该字段上设置隐式False。可用于清除字段,或避免使用字段的默认值。

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

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

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

      主要用于Many2one和参考字段

    • type
      如果提供了类型属性,则用于解释和转换字段的内容。字段的内容可以通过使用文件属性的外部文件提供,也可以通过节点的主体提供

      可用类型有:

      • xml, html
        将字段的子级提取为单个文档,计算使用%(external_id)s形式指定的任何外部id。%%可用于输出实际的%符号

      • file
        确保字段内容是当前模型中的有效文件路径,将对模块、路径保存为字段值

      • char
        将字段内容直接设置为字段的值而不进行更改

      • base64
        base64-编码字段的内容,与文件属性结合使用以加载例如有用。图像数据到附件中

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

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

      • list, tuple
        应包含任意数量的值元素,其属性与field相同,每个元素解析为生成的元组或列表的一个项目,并将生成的集合设置为字段的值

    • eval
      对于前面的方法不合适的情况,eval属性只是评估它提供的任何Python表达式,并将结果设置为字段的值

      评估上下文包含各种模块(time、datetime、timedelta、relativedelta)、解析外部标识符的函数(ref)和当前字段的模型对象(obj)

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

    • model (必须)
      应删除指定记录的模型

    • id
      要删除的记录的外部ID

    • search
      查找要删除的模型记录的域

      id和搜索是独占的

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

    可以使用eval(应该评估为调用方法的参数序列)或value元素(请参阅列表值)提供参数。

     <odoo>
         <data noupdate="1">
             <record name="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>
    
Shortcuts

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

  • menuitem
    定义包含许多默认值和回退的 ir.ui.menu 记录:

    • parent
      如果设置了父属性,它应该是其他菜单项的外部id,用作新项目的父属性

      如果没有提供父级,则尝试将name属性解释为菜单名称的 /-separated序列,并在菜单层次结构中找到一个位置。在这种解释中,会自动创建中间菜单

      否则,菜单将被定义为“顶级”菜单项(不是没有父级的菜单)

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

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

    • action
      如果指定,action属性应该是打开菜单时要执行的操作的外部ID

    • id
      菜单项的外部ID

  • template
    创建一个QWeb视图,只需要视图的拱形部分,并允许一些可选属性:

    • id
      视图的外部标识符

    • name, inherit_id, priority
      与 ir.ui.view 对应字段相同(nb:inherit_id应该是外部标识符)

    • primary
      如果设置为True并与inherit_id组合,则将视图定义为主视图

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

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

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

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

第二列是要链接到的国家对象的外部id(国家对象必须事先定义)

第三列是 res.country.state的名称字段

第四列是 res.country.state的代码字段

注:以上是对于odoo文档下Python framework的Data Files的翻译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值