Inheritance in Views
当你要在一些自定义或是特定的模块上创建和继承对象时,在已经存在的视图上通过继承来添加/修改/删除一些字段相比于替换更好些。
Example: |
---|
<record model="ir.ui.view" id="view_partner_form">
<field name="name">res.partner.form.inherit</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Relations">
<field name="relation_ids" colspan="4" nolabel="1"/>
</page>
</notebook>
</field>
</record>
这是要在base模块上给res.partner.form的notebook里面加一个page。
继承engine会分析已存在的视图并且搜索的根节点。
<field name="arch" type="xml">
它会添加或是修改这个标签的内容。如果这个标签有很多属性,它会查找父类视图来匹配这些属性。
在位置属性上你可以使用以下的值:
inside (default): your values will be appended inside the tag
after: add the content after the tag
before: add the content before the tag
replace: replace the content of the tag.
Replacing Content
<record model="ir.ui.view" id="view_partner_form1">
<field name="name">res.partner.form.inherit1</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<page string="Extra Info" position="replace">
<field name="relation_ids" colspan="4" nolabel="1"/>
</page>
</field>
</record>
可用relation_ids字段来替换notebook的额外信息标签的内容。
父类和子类的视图可像其他视图一样通过—update=all来进行更新。
Deleting Content
想要删除表单视图中的一个字段,可使用position=”replace”属性。
<record model="ir.ui.view" id="view_partner_form2">
<field name="name">res.partner.form.inherit2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="replace"/>
</field>
</record>
Inserting Content
想要加一个字段到form中在特定标签前的话,使用position=’before’属性。
<record model="ir.ui.view" id="view_partner_form3">
<field name="name">res.partner.form.inherit3</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="before">
<field name="relation_ids"/>
</field>
</field>
</record>
在lang字段前加relation_ids字段。
想要加一个字段到form中在指定标签后的话,使用position=’before’属性。
<record model="ir.ui.view" id="view_partner_form4">
<field name="name">res.partner.form.inherit4</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="after">
<field name="relation_ids"/>
</field>
</field>
</record>
在lang字段后加relation_ids字段。
Multiple Changes
想要在多个位置进行更改,在数据元素中包裹多个字段。
<record model="ir.ui.view" id="view_partner_form5">
<field name="name">res.partner.form.inherit5</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<data>
<field name="lang" position="replace"/>
<field name="website" position="after">
<field name="lang"/>
</field>
</data>
</field>
</record>
在平常位置删除lang字段,在website后显示它。
XPath Element
有时视图因为太复杂了而不能让你简单的通过name找到字段。例如,字段显示在两个地方。在这种情况下,你可以使用xpath元素来描述想要进行更改的位置。
<record model="ir.ui.view" id="view_partner_form6">
<field name="name">res.partner.form.inherit6</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<data>
<xpath
expr="//field[@name='address']/form/field[@name='email']"
position="after">
<field name="age"/>
</xpath>
<xpath
expr="//field[@name='address']/tree/field[@name='email']"
position="after">
<field name="age"/>
</xpath>
</data>
</field>
</record>
在表单视图和列表视图中添加age字段在email字段后。