将创建好的model文件内的py文件添加到models/init.py文件子文件夹中的代码文件:
from . import 文件名
- 使用_inherit类属性来声明所继承模型,如果_name 和_inherit 的值是一样的话,不会创建新表,_name 可以省略不写,新家的字段会加在原模型中也就是原来的表中。
- _name 和 _inherit 的值不相同时,会按照_name的值命名一个表,相当于把原表的字段拷贝过来,新加的字段显示到新表中。
from odoo import fields, models
class Book(models.Model):
_name='test.test'
_inherit = test.test'
视图继承
<record id="view_gg_employee_form" model="ir.ui.view">
<field name="name">view_gg_employee_form</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook" position="after">
<notebook>
<page string="工作变动记录">
<field name="employee_change_line" widget="one2many_list">
<tree editable="bottom">
<field name="type"/>
<field name="change_date"/>
<field name="note"/>
</tree>
</field>
</page>
<page string="活动记录">
<field name="event_ids"/>
</page>
<page string="奖惩记录">
<field name="reward_line" widget="one2many_list">
<tree editable="bottom">
<field name="type"/>
<field name="reason"/>
<field name="reward_date"/>
<field name="note"/>
</tree>
</field>
</page>
</notebook>
</xpath>
</field>
</record>
- 上述xml代码是继承了hr.employee模型的view_employee_form视图。model为模型名就是表名,inherit_id 是ir.ui.view视图继承表中的id,ref对应的是被继承的模块名.表名。
一般通过name 属性定位要插入元素的位置。
例如
<field name="date_tz" position="after">
<field name="note"/>
</field>
date_tz 是继承的视图中的字段,position 规定要插入的位置(inside、after、before、replace、attributes)
inside(默认值):在所选节点内添加内容,这一节点应是<group>或<page>一类的容器
after:在选定节点之后向父节点添加内容
before:在选定节点之前向父节点添加内容
replace:替换所选节点。若使用空元素则会删除该元素。Odoo 之后还允许使用其它标记来包裹元素,通过在内容中使用$0来表示被替换的元素。
attributes:修改匹配元素属性值。内容中应包含带有一个或多个<attribute name="attr-name">value</attribute>元素。如
<xpath expr="//notebook" position="attributes">
<attribute name="invisible">True</attribute>
</xpath>
规定视图中的notebook节点是否显示。
- XPath 选取继承点
带唯一值的属性来用作 XML 节点选择器,通常使用name属性,要保证元素name 属性唯一。
如<group>、<notebook>或<page>,相同元素可能在同一 XML 模板中被多次包含。使用//field[@name]='date_tz'表达式查找也可直接使用元素查找