Search code examples
pythonxmlodoo-11

How to show a specific form view (custom) on a Single field?


I have a field member_id= fields.Many2one('res.partner', string="Member") and Member is created in my Building module through res.partner. I want to show a custom form on member_id rather than form view of res.partner. How is this possible??

py code:

class CreateTicket(models.Model):
    _inherit = 'helpdesk.ticket'

    member_id = fields.Many2one('res.partner', string="Member", domain=[('company_type', '=', 'person')])
    office_no = fields.Char(string="Office No")
    floor = fields.Char(string="Floor")
    raised_by = fields.Char(string="Raised By")
    assigned = fields.Char('Assigned')

    @api.onchange('member_id')
    def onchange_member_id(self):
        obj=self.env['res.contract'].search([('membership_id','=',self.member_id.id)])
        self.floor = obj.sector_id.name
        self.office_no = obj.inventory_id.id

XML code:


<record model="ir.ui.view" id="create_ticket_inherit_view">
        <field name="name">Create Ticket</field>
        <field name="model">helpdesk.ticket</field>
        <field name="inherit_id" ref="helpdesk_basic.view_helpdesk_form"/>
        <field name="arch" type="xml">
            <xpath expr="//div[@name='button_box']/button[@name='action_get_attachments']" position="after">
                <button class="oe_stat_button" name="on_assigned"
                                type="object" icon="fa-tasks">
                            <field name="assigned" widget="statinfo"/>
                </button>
            </xpath>

            <xpath expr="//field[@name='priority']" position="after">
                <field name="member_id"/>
                <field name="office_no"/>
                <field name="floor"/>
                <field name="raised_by"/>
            </xpath>

        </field>
    </record>

I created a member in different model and I want that view but res.partner base view is being displayed every time.


Solution

  • Use context to pass the XML-Id of the form that your many2one should display:

    <field name="member_id"
             context="{'form_view_ref':'app_name.xmlID_of_form'}" />
    

    There is tree_view_ref, kanban_view_ref that can be used in X2many fields