简介继承
在 odoo 里可以通过继承的方式来改写已经存在的 view
对比 view 的定义视图定义中写法多了 inherit_id
inherit_id 指向要改写的 view<field name=”inherit_id” ref=”id_category_list”/>
在 arch 里用 xpath 定位改写的元素
<!– 改写 ibuilding list 列表视图 –>
<record id=”building_list_view” model=”ir.ui.view”>
<field name=”name”>building.list.view</field>
<field name=”model”>ibuilding.list</field>
<field name=”inherit_id” ref=”building_list”/>
<field name=”arch” type=”xml”>
<!– 找到 ids 字段,在其后添加 idea_id 字段 –>
<xpath expr=”//field[@name=’ids’]” position=”after”>
<field name=”idea_id” string=”Number of ideas”/>
</xpath>
<!– 找到 upload 字段,在其后添加 idea_ids 字段 –>
<xpath expr=”//field[@name=’upload’]” position=”replace”>
<field name=”download” string=” 下载一个文件 ”/>
</xpath>
</field>
</record>
注意找到的元素必须是一个,如果定位出多个元素或者是空,都会报错。
expr Xpath 表达式用来选择父视图中的某个元素,如果没找到或找到多个元素会抛出一个异常
position 定位有如下选择
inside 在内部结尾插入元素
replace 替换元素
before 在之前插入元素
after 在其后插入元素
attributes 修改 xml 的属性
当仅匹配一个 field 时,erpr 表达式可以简化如下
<xpath expr=”//field[@name=’upload’]” position=”replace”>
<field name=”download” />
</xpath>
<field name=”upload” position=”replace”>
<field name=”download” />
</field>