I am working on an Odoo 16 module and I’m facing an issue with context passing when creating a new contact from my module. Specifically, I have three custom fields that should only be visible when a certain context is present, but they are not showing up as expected.
When I start writing in contact_id field and click “create and edit”, the context should be passed, so that I can fill out the additional fields in res.partner.
res_partner.py:
from odoo import models, fields, api
class ResPartner(models.Model):
_inherit = 'res.partner'
age = fields.Integer(string="Age", tracking=True)
sex = fields.Selection([
('male', 'Male'),
('female', 'Female'),
('other', 'Other')
], string="Sex", tracking=True)
occupational_group = fields.Selection([
('white_collar', 'White Collar'),
('blue_collar', 'Blue Collar'),
('other', 'Other')
], string="Occupational Group", tracking=True)
show_claim_fields = fields.Boolean(string="Show Claim Fields", compute="_compute_show_claim_fields")
@api.depends_context('default_from_claims')
def _compute_show_claim_fields(self):
for partner in self:
partner.show_claim_fields = self.env.context.get('default_from_claims', False)
res_partner_views.xml:
<odoo>
<data>
<record id="view_partner_form_inherited" model="ir.ui.view">
<field name="name">res.partner.form.inherited</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="after">
<field name="age" attrs="{'invisible': [('show_claim_fields', '=', False)]}"/>
<field name="sex" attrs="{'invisible': [('show_claim_fields', '=', False)]}"/>
<field name="occupational_group" attrs="{'invisible': [('show_claim_fields', '=', False)]}"/>
<field name="show_claim_fields" invisible="1"/>
</xpath>
</field>
</record>
</data>
</odoo>
claim_details_views.xml:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.actions.act_window" id="action_create_claim">
<field name="name">Add claim</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">claim.details</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'default_policy_number': policy_number}</field>
</record>
<record id="action_create_contact" model="ir.actions.act_window">
<field name="name">Create Contact</field>
<field name="res_model">res.partner</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'default_from_claims': True}</field>
</record>
<record id="claim_details_view_form" model="ir.ui.view">
<field name="name">claim.details.view.form</field>
<field name="model">claim.details</field>
<field name="arch" type="xml">
<form string="Claim Details">
<sheet>
<group>
<group>
<field name="force_readonly" invisible="1"/>
<field name="external_policy_number" attrs="{'readonly': [('force_readonly', '=', True)]}"/>
<field name="date_claimed"/>
<field name="initial_reserve"/>
<field name="claim_note"/>
<field name="accident_date"/>
<field name="contact_id" options="{'no_quick_create': True, 'action': 'action_create_contact'}" context="{'default_from_claims': True}"/>
<field name="external_claim_number"/>
<field name="cause_of_claim"/>
</group>
Any help would be greatly appreciated!