如何在OpenERP中继承CRM-Lead并自定义字段

用户在OpenERP中继承了CRM-Lead模块,并希望向其添加新的字段和隐藏一些现有字段。但在尝试这样做时遇到了困难。

以下是用户的代码:

init.py

import lead

openerp.py

{
    
    
'name': 'Lead Information',
'version': '0.1',
'category': 'Tools',
'description': """This module is Lead information.""",
'author': 'Nitesh',
'website': '',
'depends': ['crm'],
'init_xml': ['lead_view.xml'],
'update_xml': [],
'demo_xml': [],
'installable': True,
'active': True,
'application': True
}

lead.py

from osv import osv, fields

class crm_lead(osv.osv):
    _name = 'bala.lead'
    _inherit = 'crm.lead'
    _description = "adding fields to crm.lead"
    _coloumns = {
    
    
        'nitesh_lead': fields.char('Nitesh Lead',size=64)
    }

lead_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <!-- ========================This is Form layout===============================-->
    <record id="crm_case_form_view_leads_extended" model="ir.ui.view">
        <field name="name">CRM - Leads Form</field>
        <field name="model">crm.lead</field>
        <field name="inherit_id" ref="crm.crm_case_form_view_leads" />
        <field name="arch" type="xml">
            <field name="email_from" postion="replace"/>
            <field name="partner_name" postion="after">
                <field name="nitesh_lead"/>
            </field>
       </field>
    </record>
    <record id="new_lead" model="ir.actions.act_window">
        <field name="name">Lead</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">crm.lead</field>
        <field name="view_type">form</field>
        <field name="view_mode">form</field>
        <field name="view_id" ref="crm_case_form_view_leads_extended"/>
    </record>
       <!-- ===========================Menu Settings=========================== -->
    <menuitem name ="Lead" id = "menu_lis_lab" action="new_lead"/>
</data>
</openerp>

2、解决方案

  1. 修改__openerp__.py中的model字段,使其指向自定义模块的模型名称,即bala.lead
'model': 'bala.lead',
  1. 修改crm_lead()方法,确保其继承了正确的模型类,即bala.lead
class crm_lead(osv.osv):
    _name = 'bala.lead'
    _inherit = 'bala.lead'
  1. 修改lead_view.xml文件,将model属性改为bala.lead
<record id="crm_case_form_view_leads_extended" model="ir.ui.view">
    <field name="model">bala.lead</field>
  1. lead_view.xml文件中添加<field name="nitesh_lead"/>元素,将其放在您想要添加新字段的位置。

  2. lead_view.xml文件中添加<xpath>元素,将其放在您想要隐藏现有字段的位置,然后在<xpath>元素中添加<field name="field_name" position="replace"/>元素。

  3. 更新模块以应用更改。

以下是如何修改后的代码:

openerp.py

{
    
    
'name': 'Lead Information',
'version': '0.1',
'category': 'Tools',
'description': """This module is Lead information.""",
'author': 'Nitesh',
'website': '',
'depends': ['crm'],
'init_xml': ['lead_view.xml'],
'update_xml': [],
'demo_xml': [],
'installable': True,
'active': True,
'application': True
}

lead.py

from osv import osv, fields

class crm_lead(osv.osv):
    _name = 'bala.lead'
    _inherit = 'bala.lead'
    _description = "adding fields to crm.lead"
    _columns = {
    
    
        'nitesh_lead': fields.char('Nitesh Lead',size=64)
    }
    crm_lead()

lead_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <!-- ========================This is Form layout===============================-->
    <record id="crm_case_form_view_leads_extended" model="ir.ui.view">
        <field name="name">CRM - Leads Form</field>
        <field name="model">bala.lead</field>
        <field name="inherit_id" ref="crm.crm_case_form_view_leads" />
        <field name="arch" type="xml">
            <field name="email_from" position="replace"/>
            <xpath expr="//label[@for='contact_name']" position="before">
                <field name="nitesh_lead"/>
            </xpath>
            <field name="function" position="replace"/>
            <field name="partner_name" position="replace"/>
            <field name="priority" position="replace"/>
            <field name="partner_id" position="replace"/>
        </field>
    </record>
    <record id="new_lead" model="ir.actions.act_window">
        <field name="name">Lead</field>
        <field name="res_model">bala.lead</field>
        <field name="view_type">form</field>
        <field name="view_mode">form</field>
        <field name="view_id" ref="crm_case_form_view_leads_extended"/>
    </record>
       <!-- ===========================Menu Settings=========================== -->
    <menuitem name ="Lead" id = "menu_lis_lab" action="new_lead"/>
</data>
</openerp>

现在,您应该能够在OpenERP中继承CRM-Lead模块,并向其添加新的字段和隐藏现有字段了。