odoo之预置数据

CSV演示数据

通过demo 属性来声明,后接一个包含模块相对路径的文件名列表。即文件名需与所导入到的模型名称一致
例如res.partner.csv:

id,name
res_partner_alexandre,"Alexandre Fayolle"
res_partner_daniel,"Daniel Reis"
res_partner_holger,"Holger Brunn"
res_partner_packt,"Packt Publishing"

在__manifest__.py的 demo 属性中声明数据文件:

'demo': [
  'data/res.partner.csv',
],

文件会以声明的顺序来加载,这个很重要,因为文件的记录无法引用尚未创建的记录。
只要启用了安装演示数据,在下次更新模块时,就会导入文件中的内容。
注:数据文件会在模块升级时重新导入,但演示文件则并非如此,它们仅在安装时导入

使用 XML 数据文件

添加一个数据文件data/book_demo.xml来进行展示,文件内容如下:

<?xml version="1.0"?>
<odoo noupdate="1">
    <!-- Data to load -->
    <record model="res.partner" id="res_partner_huxley">
        <field name="name">Aldous Huxley</field>
    </record>
    <record model="library.book" id="library_book_bnw">
        <field name="name">Brave New World</field>
        <field name="author_ids"
                eval="[(4, ref('res_partner_huxley'))]" />
        <field name="date_published">1932-01-01</field>
    </record>
</odoo>

同理,新的数据文件应在__manifest__.py中声明:

 "demo": [
        "data/res.partner.csv",
        "data/book_demo.xml",
    ],

XML文件包含一个外层<odoo>顶级元素,内部可包含多个<record>元素,对应 CSV 的数据行。
<record>元素有两个强制属性: model 和作为记录外部标识符的 id,每个字段使用一个标签来进行写入。

noupdate 数据属性

noupdate=”0″是默认值,升级模块时,会重新加载数据并重写模块记录。
可以通关设置noupdate=”1″,来让有些数据仅在安装时导入,升级不影响。

在 XML 中定义记录

在 XML 数据文件中,每个 元素有两个基本属性:id 和 model,并包含为对应列设置值的元素。 id 属性对应记录外部标识符,model 对应目标模型。元素有几种赋值的方法,下面一起来看看。

  • 直接为字段设置值
    元素的 name 属性标识要写入的字段。

    写入的值是元素内容:字段开、闭标签之间的文本。
    对于日期和日期,可使用带返回 date 或 datetime 对象表达式的 eval 属性设置。返回的“YYYY-mm-dd”和“YYYY-mm-dd HH:MM:SS”字符串会进行对应转化。
    对于布尔字段,“0” 和“False”都会转换成 False,而任意非空值都会转换成 True。

  • 通过表达式设置值
    设置字段值更复杂的方式是通过 eval 属性。它会运行 Python 表达式并将结果赋值给字段。
    比如,把值设为前一天,可使用如下代码:

    <field name="date_published"  eval="(datetime.now() + timedelta(-1))" />
    

    求值上下文还可使用ref()函数,用于将外部标识符转换为对应的数据库 ID。这可用于为关联字段设置值。比如,可以使用它为publisher_id设置值:

    <field name="publisher_id" eval="ref('res_partner_packt')" />   
    
  • 在多对一关联字段上设置值
    简单的替代方式是在元素中使用的ref 属性,例如:

    <field name="publisher_id" ref="res_partner_packt" />
    

    上例为publisher_id多对一字段设置值,引用XML ID为res_partner_packt的数据库记录。

  • 在对多关联字段上设置值
    对于一对多和多对多字段,设置的不是单个 ID,而是一组关联 ID。并且还进行几种操作:我们可能需要将当前的关联记录列表替换成另外一个,或为其添加几条记录,甚至是删除其中的一些记录。

    要让对多字段支持写操作,我们要在 eval 属性中使用一种特殊的语法。我们使用三元元组列表来写入对多字段。每个元组有三个元素,构成一条写入命令,根据第一个元素中的代码进行对应操作。
    重写图书作者列表,会使用如下代码:

    <field name = "author_ids"  eval = "[(6, 0, [ref('res_partner_alexandre'),ref('res_partner_holger')] )]"/>
    

    往当前图书作者列表追加关联记录,需要添加如下代码:

    <field name="author_ids"  eval="[(4, ref('res_partner_daniel'))]"/>
    

    完整的*对多写入命令如下:

    (0, _ , {‘field’: value})新建一条记录并将其与之关联
    (1, id, {‘field’: value})更新已关联记录的值
    (2, id, _)移除关联并删除 id 关联的记录
    (3, id, _)移除关联但不删除 id 关联的记录。通常使用它来删除多对多字段的关联记录
    (4, id, _)关联已存在记录,仅适用于多对多字段
    (5, _, _)删除所有关联,但不删除关联记录
    (6, _, [ids])替换已关联记录列表为此处的列表
    上述下划线_字符代表非相关值,通常填入 0 或 False。
    注:后面的非关联值可以放心地省略掉,如(4, id, _) 可使用(4, id)

XML 文件中的其它操作
删除记录

我们可以使用元素删除数据记录,使用 ID 或搜索作用域来定位要删除的记录。
例如,使用搜索作用域查找记录并删除:

<delete model="res.partner"  search="[('id','=',ref('library_app.res_partner_daniel'))]"/>

如果知道要删除记录的具体 ID,也可使用 id 属性。上例正是这样,还可以写成这样:

<delete model="res.partner" id="library_app.res_partner_daniel" />
调用模型方法

XML 文件还可以通过元素在加载过程中执行任意方法。这可用于设定演示和测试数据。

比如 Odoo 捆绑的 Notes 应用,使用它来设定演示数据:

<data noupdate="1">
   <function  model="res.users"  name="_init_data_user_note_stages"   eval="[]"/>
</data>

这会调用res.users模型中的_init_data_user_note_stages方法,不传任何参数。参数列表通过eval属性传递,此处为空列表

XML 的简单样例
<odoo noupdate="1">
    <data>
          <record id="object0" model="test_demo.test_demo">
            <field name="name">Object 0</field>
            <field name="value">0</field>
            <field name="iebs" ref="test_demo.iebs1" />
          </record>
          
          <record id="object1" model="test_demo.test_demo">
            <field name="name">Object 1</field>
            <field name="value">10</field>
          </record>
          
          <record id="object2" model="test_demo.test_demo">
            <field name="name">Object 2</field>
            <field name="value">20</field>
          </record>
    </data>
</odoo>

demo数据只在勾选演示数据后才会加载(only loaded in demonstration mode),只存放演示数据
data数据在系统启动后会自动进行加载(always loaded),可存放演示数据和实际数据
ref="模块名.record 的id”,一般是iebs是Many2one的时候用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Odoo 14的数据字典是一种用于定义和描述数据库表结构、字段属性和关系的工具。在Odoo开发中,数据字典是非常重要的,它提供了一个清晰的方式来组织和管理数据库模型。 数据字典中的主要元素包括表(模型)、字段、关系和约束。 表(模型)是数据字典的基本单元,它代表着一个数据库表。每个模型都有一个唯一的标识符和一个可选的表名。模型可以包含字段和关系,用于定义表的结构和属性。 字段是模型中的属性,用于存储和处理数据。字段可以是不同的类型,如字符、整数、日期、关联等。每个字段都有一个唯一的标识符和一个可选的字段名。字段还可以具有一些属性,如必填、只读、唯一等。 关系用于在模型之间建立联系。在Odoo中,主要有三种类型的关系:一对一关系、一对多关系和多对多关系。关系可以通过字段定义,其中涉及到一个字段类型为Many2one、One2many或Many2many。 约束用于限制字段值的范围或特性。在Odoo中,可以使用不同的约束类型,如唯一约束、非空约束和长度约束。约束可以直接在字段定义中添加,以确保数据的完整性和一致性。 通过使用Odoo 14的数据字典,开发人员可以清晰地定义和管理数据库模型,为应用程序提供可靠和高效的数据结构。此外,数据字典还支持自动化的数据库表创建和更新过程,使系统维护更加简单和方便。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值