1

res.partner を継承したカスタム モジュールがあります。フィールド "doctor" (many2one フィールド) があります。顧客を作成するときに、医師を選択できます。img 1 では、Willam が顧客であり、彼は Nitesh を選択しています。ドクターとして.Doctorのすべての詳細を表示するdoctor_view.xmlを作成しました.img 2では、「Nitesh」を「Customer Willam」の「Doctor」として選択したため、「Willam」を「」の下に表示する必要がありますクライアント" in img2. 誰でもこれで私を助けることができますか?事前に感謝します 画像1 画像2

私のコード

Customer.py

from qrcode import *
from osv import osv
from osv import fields

class res_partner(osv.osv):
 _inherit = "res.partner"
 _description = "adding fields to res.partner"
 _columns = { 

    'doctor': fields.many2one('crm.lead.doctor','Doctor'),
 }
 class crm_lead_doctor(osv.osv):
    _name = "crm.lead.doctor"
    _order = "name"
    _columns ={
        'name':fields.char('Doctor Name',required=True,size=64,translate=True),
        'doctor_id':fields.char('Doctor Id',size=64,readonly=True),
        'doctor_mobile': fields.char('Mobile',required=True,size=64),
        'doctor_email': fields.char('Email',size=64),
        'doctor_hospital': fields.many2one('crm.lead.hospital','Hospital'),
        'doctor_street': fields.char('Street', size=128),
        'doctor_street2': fields.char('Street2', size=128),
        'doctor_zip': fields.char('Zip', change_default=True, size=24),
        'doctor_city': fields.char('City', size=128),
        'doctor_state_id': fields.many2one("res.country.state", 'State'),
        'doctor_country_id': fields.many2one('res.country', 'Country'),
        'doctor_brochure': fields.char('Brochuer',size=64),
        'doctor_flyer': fields.char('Flyer',size=64),
        'doctor_training': fields.char('Training',size=64),
        'doctor_starterpacksent': fields.char('Strater pack sent',size=64),
        'doctor_no_of_deliveries': fields.char('No of Deliveries/year',size=64),
        'doctor_fee': fields.char('Fee',size=64),
        'doctor_registration': fields.char('Registration No',size=64),
        'doctor_pancard': fields.char('Pan Card No',size=64),
        'doctor_fiscalcode': fields.char('Fiscal Code',size=64),
        'doctor_iban': fields.char('IBAN',size=64),
        'doctor_contractset': fields.char('Contract Set',size=64),
        'doctor_contractrecieved': fields.char('Contract Recieved',size=64),
        'doctor_clients':fields.many2many('res.partner')
    }
    def create(self, cr, uid, vals, context={}):
        doc_seq = self.pool.get('ir.sequence').get(cr, uid, 'master.doctor')
        vals['doctor_id'] = doc_seq
        res = super(res_partner.crm_lead_doctor, self).create(cr, uid, vals, context)
        return res 

Doctor_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>

    <record id="view_doctor_form_extended" model="ir.ui.view">
    <field name="name">crm.lead.doctor.form</field>
    <field name="model">crm.lead.doctor</field>
    <field name="arch" type="xml">
        <form string="Doctor Details" version="7.0">
            <group>
                <field name="name"/>
<!--                 <field name="doctor_id"/> -->
                <field name="doctor_mobile"/>
                <field name="doctor_email"/>
                <field name="doctor_hospital"/>
                <label for="street" string="Doctor Address"/>
                <div>
                    <field name="doctor_street" placeholder="Street..."/>
                    <field name="doctor_street2"/>
                    <div class="address_format">
                        <field name="doctor_city" placeholder="City" style="width: 40%%"/>
                        <field name="doctor_state_id" on_change="onchange_state(state_id)" options='{"no_open": True}' placeholder="State" style="width: 24%%"/>
                        <field name="doctor_zip" placeholder="ZIP" style="width: 34%%"/>
                    </div>
                    <field name="doctor_country_id" placeholder="Country" options='{"no_open": True}'/>
                </div>
            </group>
            <notebook>
                <page string="Sales">
                    <group>
                        <group>
                            <field name="doctor_brochure"/>
                            <field name="doctor_flyer"/>
                            <field name="doctor_training"/>
                            <field name="doctor_starterpacksent"/>
                            <field name="doctor_no_of_deliveries"/>
                            <field name="doctor_fee"/>
                        </group>
                        <group>
                            <field name="doctor_registration"/>
                            <field name="doctor_pancard"/>
                            <field name="doctor_fiscalcode"/>
                            <field name="doctor_iban"/>
                            <field name="doctor_contractset"/>
                            <field name="doctor_contractrecieved"/> 
                        </group> 
                    </group>
                </page>
                <page string="Clients">
                   <field name="doctor_clients"/>
                </page>
            </notebook>
        </form>
    </field>
    </record>
<record id="view_doctor_tree_extended" model="ir.ui.view">
    <field name="name">crm.lead.doctor.tree</field>
    <field name="model">crm.lead.doctor</field>
    <field name="arch" type="xml">
        <tree string="Doctor Details" version="7.0">
                <field name="doctor_id"/>
                <field name="name"/>
                <field name="doctor_mobile"/>
                <field name="doctor_email"/>
                <field name="doctor_hospital"/>
        </tree>
    </field>
    </record>

    <record id="new_doctor" model="ir.actions.act_window">
        <field name="name">Doctors</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">crm.lead.doctor</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_doctor_tree_extended"/>
    </record>

<!-- ===========================Menu Settings=========================== -->
<menuitem name ="Doctors - Hospitals" id = "menu_lead" />
  <menuitem name="Doctors" id="sub_menu_lead" parent="menu_lead" />
    <menuitem name="Doctors" id="create_lead" parent="sub_menu_lead" action="new_doctor"/>

</data>
</openerp>
4

2 に答える 2

1

これは、医師とクライアントの間の 1 対多の関係の完璧な例です。openerp でそのように認識した場合、クライアントがドクタービューに表示されます。

クライアントが複数の医師を持っている場合、many2many は理にかなっています。

ちょっとしたヒント:'doctor_clients':fields.one2many('res.partner','doctor')

from qrcode import *
from osv import osv
from osv import fields

class res_partner(osv.osv):
 _inherit = "res.partner"
 _description = "adding fields to res.partner"
 _columns = { 

    'doctor': fields.many2one('crm.lead.doctor','Doctor'), #the so called relation_field for the one2many relation to crm.lead.doctor
 }
 class crm_lead_doctor(osv.osv):
    _name = "crm.lead.doctor"
    _order = "name"
    _columns ={
        'name':fields.char('Doctor Name',required=True,size=64,translate=True),
        'doctor_id':fields.char('Doctor Id',size=64,readonly=True),
        'doctor_mobile': fields.char('Mobile',required=True,size=64),
        'doctor_email': fields.char('Email',size=64),
        'doctor_hospital': fields.many2one('crm.lead.hospital','Hospital'),
        'doctor_street': fields.char('Street', size=128),
        'doctor_street2': fields.char('Street2', size=128),
        'doctor_zip': fields.char('Zip', change_default=True, size=24),
        'doctor_city': fields.char('City', size=128),
        'doctor_state_id': fields.many2one("res.country.state", 'State'),
        'doctor_country_id': fields.many2one('res.country', 'Country'),
        'doctor_brochure': fields.char('Brochuer',size=64),
        'doctor_flyer': fields.char('Flyer',size=64),
        'doctor_training': fields.char('Training',size=64),
        'doctor_starterpacksent': fields.char('Strater pack sent',size=64),
        'doctor_no_of_deliveries': fields.char('No of Deliveries/year',size=64),
        'doctor_fee': fields.char('Fee',size=64),
        'doctor_registration': fields.char('Registration No',size=64),
        'doctor_pancard': fields.char('Pan Card No',size=64),
        'doctor_fiscalcode': fields.char('Fiscal Code',size=64),
        'doctor_iban': fields.char('IBAN',size=64),
        'doctor_contractset': fields.char('Contract Set',size=64),
        'doctor_contractrecieved': fields.char('Contract Recieved',size=64),
        'doctor_clients':fields.one2many('res.partner','doctor','Clients') #here we use 'doctor' the new field of res.partner as relation_field to bind the relation
    }
    def create(self, cr, uid, vals, context={}):
        doc_seq = self.pool.get('ir.sequence').get(cr, uid, 'master.doctor')
        vals['doctor_id'] = doc_seq
        res = super(res_partner.crm_lead_doctor, self).create(cr, uid, vals, context)

ビューは問題ありません

于 2014-02-27T13:11:19.450 に答える