odoo 继承


模型和视图的继承

模型继承

odoo提供了两种一模块化方式扩展现有模型的机制。

第一种 _inherit

允许模块修改在另一个模块中定义的模型的行为

  • 将字段添加到模型中,
  • 重写模型上字段的定义,
  • 向模型添加约束,
  • 将方法添加到模型中,
  • 覆盖模型上的现有方法。

第二种继承(委托) _ inherits

允许将模型的每个记录链接到父模型中的记录,并提供对父记录字段的透明访问。

odoo 继承图形

视图继承

odoo提供视图继承,其中子视图“扩展”视图应用在根视图之上,并且可以从父视图中添加或删除内容。

扩展视图使用inherit_id字段,而不是单个视图arch字段由任意数量的xpath元素选择并更改其父视图的内容:

<!-- improved idea categories list -->
<record id="idea_category_list2" model="ir.ui.view">
    <field name="name">id.category.list2</field>
    <field name="model">idea.category</field>
    <field name="inherit_id" ref="id_category_list"/>
    <field name="arch" type="xml">
        <!-- find field description and add the field
             idea_ids after it -->
        <xpath expr="//field[@name='description']" position="after">
          <field name="idea_ids" string="Number of ideas"/>
        </xpath>
    </field>
</record>
  • expr

    XPath 表达式在父视图中选择单个元素。如果不匹配任何元素或多个元素,则引发错误,就是一个定位的作用。

  • position

    操作应用于匹配的元素,匹配到后有下列属性。

    • inside

      使用xpath的时候插入到末尾

    • replace

      将匹配的元素替换为xpath他的身体,取代任何$0在具有原始元素的新主体中出现节点。

    • before

      插入xpath在匹配元素之前作为兄弟姐妹的身体

    • after

      插入xpaths作为匹配元素后面的兄弟姐妹的身体

    • attributes

      使用特殊方法更改匹配元素的属性。attribute元素中的xpath

匹配单个元素时,position属性可以直接设置在要查找的元素上。以下两项继承将产生相同的结果。

<xpath expr="//field[@name='description']" position="after">
    <field name="idea_ids" />
</xpath>

<!--只要一个元素的时候可以这样,但一般不这样做-->
<field name="description" position="after">
    <field name="idea_ids" />
</field>

domains 域

在odoo中,搜索域是对记录上的条件进行编码的值。域是用于选择模型记录的子集的标准列表。每个条件都是一个具有字段名、运算符和值的三元组。

例如,当在产品建模以下域选择所有服务单价超过1000。两个组,每个组三个元素,依次为字段名,运算符,匹配值。

[('product_type', '=', 'service'), ('unit_price', '>', 1000)]

默认情况下,标准与隐式和。逻辑运算符&(及)|(或)及!(NOT)可用于显式地组合标准。

['|',
    ('product_type', '=', 'service'),
    '!', '&',
        ('unit_price', '>=', 1000),
        ('unit_price', '<', 2000)]
<field name="product_id" domain="[('active','=',True)]"/>

文章作者: theing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 theing !
评论
  目录