Context field. default value for popup

I work with Odoo (v9). I have custom: form (for model 1), action and popup with a form (for model 2). Here is an example of the main form:

<record id="my_id_form" model="ir.ui.view"> <field name="name">my_name_form</field> <field name="model">my_model_one</field> <field name="arch" type="xml"> <form string="Name"> <sheet> <group> <field name="partner_id"/> <!-- button which open popup with my_model_two --> <button string="Open popup" name="%(my_module.action_open_popup)d" type="action" class="btn-link"/> </group> </sheet> </form> </field> </record> 

Window action for the Open popup window button:

 <record id="action_open_popup" model="ir.actions.act_window"> <field name="name">action name</field> <field name="res_model">my_model_two</field> <field name="view_id" ref="model_two_form_popup"/> <!-- How I can send partner_id from main form to popup? I tried different ways in context field, but all in vain <field name="context">{'default_partner_id': ?????,}</field> --> <field name="target">new</field> </record> 

My_model_one example

 class MyModelOne(models.Model): _name = 'my_model_one' partner_id = fields.Many2one('res.partner', string='Partner') 

Popup form:

 <record id="model_two_form_popup" model="ir.ui.view"> <field name="name">Popup name</field> <field name="model">my_model_two</field> <field name="arch" type="xml"> <form string="Popup text"> <sheet> <group> <field name="partner_id" invisible="1"/> <group> </sheet> </form> </field> </record> 

My question is: how can I send a value from a field in the main form to a popup form? (partner_id)

I saw how the code uses the values ​​of active_id, string or integer. But I did not find how to send field values ​​or how to register a method for user logic. Can someone give a small example? Thanks in advance.

+5
source share
3 answers

I have found a solution. In the element button, you need to add the following context:

 <button string="Open popup" name="%(my_module.action_open_popup)d" type="action" class="btn-link" <!-- name_of_parameter: name_of_field --> context="{'partner_id': partner_id}"/> 

After that, we need to set the default value for the popup:

 <record id="action_open_popup" model="ir.actions.act_window"> <field name="name">action name</field> <field name="res_model">my_model_two</field> <field name="view_id" ref="model_two_form_popup"/> <!-- set default value to field from context parameter by name --> <field name="context">{'default_partner_id': context.get('partner_id', False),}</field> <field name="target">new</field> </record> 
+7
source

you can do better if the context can be dynamic when you use the python method to open a popup in addoo examples:

 @api.multi def open_popup(self) #the best thing you can calculate the default values # however you like then pass them to the context return { 'name': 'Import Module', 'view_type': 'form', 'view_mode': 'form', 'target': 'new', 'res_model': 'model.name', 'type': 'ir.actions.act_window', 'context': {'default_partner_id':value,'default_other_field':othervalues}, } 
+4
source

In the field of view xml:

 <field name="item_ids" nolabel="1" domain="['apl_id','=',active_id]" context="{'res_id':active_id}"> 

and in model.py (items):

 _defaults = { "res_id": lambda self,cr,uid,c:c.get('res_id',False) } 
+1
source

Source: https://habr.com/ru/post/1241136/


All Articles