在OpenERP中继承自定义模块



我已经成功创建了模块,它工作正常。现在,我从该模块继承了另一个模块,我需要您对 xml 生成的支持。我已经给出了原始模块.py和xml文件以及新的模块.py文件。请为我提供新模块的 xml

原始模块.py文件

from osv import osv
from osv import fields
class test_base(osv.osv):
    _name='test.base'
    _columns={
        'name':fields.char('Name'),
        'email':fields.char('Email'),
        'code':fields.integer('Unique ID'),
        'sal':fields.float('Salary'),
        'rate':fields.selection(((10,'10'), (20,'20'),(30,'30')),
               'Percentage of Deduction'),
        'ded':fields.float('Deduction'),
        'bdisplay':fields.float('Button Display'),
}
    def on_change_ded_cal(self, cr, uid, ids,rate,context=None):
        x=rate*2
        return {'value':{'ded':x }}

test_base()  

原始模块 XML

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
   <record model="ir.ui.view" id="test_base_form">
       <field name="name">test.base.form</field>
           <field name="model">test.base</field>
           <field name="type">form</field>
           <field name="arch" type="xml">
               <form string="Test Base">                       
                   <field name="name"/>
                   <field name="email"/>
                   <field name="code"/>
                   <field name="sal"/>
                   <field name="rate" on_change="on_change_ded_cal(rate)"/>
                   <field name="ded"/>                       
                   <field name="bdisplay"/>                    
                  </form>
          </field>
    </record>
    <record model="ir.ui.view" id="test_base_tree">
        <field name="name">test.base.tree</field>
        <field name="model">test.base</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="Test Base">               
               <field name="name"/>
                <field name="email"/>
                <field name="code"/>
                <field name="sal"/>          
                <field name="ded"/>                    
            </tree>
        </field>
    </record>
        <record model="ir.actions.act_window" id="action_test_seq">
        <field name="name">Test Base</field>
        <field name="res_model">test.base</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>
    <menuitem id="menu_test_base_main" name="Test Base" action="action_test_seq"/>
    <menuitem id="menu_test_base" parent="menu_test_base_main"
              name="Test Base1" action="action_test_seq"/>
</data>
</openerp>

新建模块.py文件

from osv import osv
from osv import fields
class my_base(osv.osv):
    _name='my.base'
_inherit='test.base'
    _columns={
        'dept':fields.char('Department'),       
        }       
my_base()     

(可以在"ded"字段之后添加新字段"部门",也请在 XML ID 上解释)

在这里,您继承了test.base模型及其功能以my.base 。因此,my.base将被视为新模型,并且您已为my.base模型定义了新视图。不能继承test.base 的视图。如果尝试向test.base模型添加新字段,请从my_base() class中删除_name属性或将 name 属性更改为 _name ='test.base' 。然后,您可以继承 test.base 模型的视图来添加新字段。例如,您想将新字段"dept"添加到test.base的树视图中,然后

<record model="ir.ui.view" id="test_base_tree_inheirt">
    <field name="name">test.base.tree</field>
    <field name="model">test.base</field>
    <field name="type">tree</field>
    <field name="inherit_id" ref="<base_module_name>.test_base_tree"/>
    <field name="arch" type="xml">
        <field name="email" position="after">
            <field name="dept"/>
        </field>
    </field>
</record>

此处base_module_name是定义 id test_base_tree的原始视图的模块的名称。如果它位于同一模块中,则无需提供模块名称,只需提供视图 ID。这样,您还可以继承窗体视图。

最新更新