最近开发遇到了这样的问题:需要往HR模块里面添加一些查询条件,这些查询条件是HR模型里已经写好的,直接修改HR肯定可以实现,但是HR模块一旦修改就会导致一系列的错误,OE开发中的一项基本原则就是不可修改基础模块,OE里面的基础模块包括hr,product,sale,stock,invoice等,都是不能直接修改的,但是又要修改之前的怎么办呢?
这就要用到OE里面的继承机制,继承有两种写法,一种是在model里面继承,一种是在视图里面继承,模型里面继承的写法:
直接继承hr.employee里面的字段,同时在columns里面添加新的字段,然后新的字段就会加到hr.employee表中,第二种方法在view里面继承,写法为:
<record id="employee_extend_form_gender" model="ir.ui.view">
<field name="name">hr.employee.extend.form.gender</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='gender']" position="replace">
<field name="gender" select="1"/>
</xpath>
</field>
</record>
model表示继承的模型,inherit_id表示继承的性质,ref表示从哪个地方引入的view,arch里面接的是要修改的内容,position有四个值,用到的有replace和after,replace表示替换原来的,after是在//field[@name='gender']后面加字段。
(——未完待续——)