Inheritance in Views

当你要在一些自定义或是特定的模块上创建和继承对象时,在已经存在的视图上通过继承来添加/修改/删除一些字段相比于替换更好些。

Example:
  1. <record model="ir.ui.view" id="view_partner_form">
  2. <field name="name">res.partner.form.inherit</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <notebook position="inside">
  7. <page string="Relations">
  8. <field name="relation_ids" colspan="4" nolabel="1"/>
  9. </page>
  10. </notebook>
  11. </field>
  12. </record>

这是要在base模块上给res.partner.form的notebook里面加一个page。

The inheritance engine will parse the existing view and search for the the root nodes of

  1. <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

  1. <record model="ir.ui.view" id="view_partner_form1">
  2. <field name="name">res.partner.form.inherit1</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <page string="Extra Info" position="replace">
  7. <field name="relation_ids" colspan="4" nolabel="1"/>
  8. </page>
  9. </field>
  10. </record>

可用relation_ids字段来替换notebook的额外信息标签的内容。

父类和子类的视图可像其他视图一样通过—update=all来进行更新。

Deleting Content

想要删除表单视图中的一个字段,可使用position=”replace”属性。

  1. <record model="ir.ui.view" id="view_partner_form2">
  2. <field name="name">res.partner.form.inherit2</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <field name="lang" position="replace"/>
  7. </field>
  8. </record>

Inserting Content

想要加一个字段到form中在特定标签前的话,使用position=’before’属性。

  1. <record model="ir.ui.view" id="view_partner_form3">
  2. <field name="name">res.partner.form.inherit3</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <field name="lang" position="before">
  7. <field name="relation_ids"/>
  8. </field>
  9. </field>
  10. </record>

在lang字段前加relation_ids字段。

想要加一个字段到form中在指定标签后的话,使用position=’before’属性。

  1. <record model="ir.ui.view" id="view_partner_form4">
  2. <field name="name">res.partner.form.inherit4</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <field name="lang" position="after">
  7. <field name="relation_ids"/>
  8. </field>
  9. </field>
  10. </record>

在lang字段后加relation_ids字段。

Multiple Changes

想要在多个位置进行更改,在数据元素中包裹多个字段。

  1. <record model="ir.ui.view" id="view_partner_form5">
  2. <field name="name">res.partner.form.inherit5</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <data>
  7. <field name="lang" position="replace"/>
  8. <field name="website" position="after">
  9. <field name="lang"/>
  10. </field>
  11. </data>
  12. </field>
  13. </record>

在平常位置删除lang字段,在website后显示它。

XPath Element

有时视图因为太复杂了而不能让你简单的通过name找到字段。例如,字段显示在两个地方。在这种情况下,你可以使用xpath元素来描述想要进行更改的位置。

  1. <record model="ir.ui.view" id="view_partner_form6">
  2. <field name="name">res.partner.form.inherit6</field>
  3. <field name="model">res.partner</field>
  4. <field name="inherit_id" ref="base.view_partner_form"/>
  5. <field name="arch" type="xml">
  6. <data>
  7. <xpath
  8. expr="//field[@name='address']/form/field[@name='email']"
  9. position="after">
  10. <field name="age"/>
  11. </xpath>
  12. <xpath
  13. expr="//field[@name='address']/tree/field[@name='email']"
  14. position="after">
  15. <field name="age"/>
  16. </xpath>
  17. </data>
  18. </field>
  19. </record>

在表单视图和列表视图中添加age字段在email字段后。