模型和视图的继承
模型继承
odoo提供了两种一模块化方式扩展现有模型的机制。
第一种 _inherit
允许模块修改在另一个模块中定义的模型的行为
- 将字段添加到模型中,
- 重写模型上字段的定义,
- 向模型添加约束,
- 将方法添加到模型中,
- 覆盖模型上的现有方法。
第二种继承(委托) _ inherits
允许将模型的每个记录链接到父模型中的记录,并提供对父记录字段的透明访问。

视图继承
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>
exprXPath 表达式在父视图中选择单个元素。如果不匹配任何元素或多个元素,则引发错误,就是一个定位的作用。
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)]"/>