odoo campo de contexto. valor predeterminado de la ventana emergente

Yo trabajo con Odoo(v9). He personalizado: formulario(modelo 1), la acción y la ventana con el formulario(para el modelo 2).
Aquí ejemplo de formulario principal:

<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>

Ventana de acción para el botón Abrir 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"/>
    <!-- 
    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>

Ejemplo my_model_one

class MyModelOne(models.Model):
    _name = 'my_model_one'

    partner_id = fields.Many2one('res.partner', string='Partner')

Emergente forma:

<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>

Mi pregunta es: ¿Cómo puedo enviar valor de campo en el formulario principal a emergente forma?(partner_id)

Vi cómo en el código utilizado active_id, una cadena o un entero de los valores. Pero no he encontrado la forma de enviar los valores de los campos o de cómo registrar el método de la lógica personalizada.
Alguien puede proporcionar un pequeño ejemplo? Gracias de antemano.

OriginalEl autor Danila Ganchar | 2016-01-21

3 Kommentare

  1. 9

    He encontrado la solución.
    En el elemento de botón necesidad de agregar contexto como este:

    <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}"/>

    Después de esto necesitamos establecer como valor predeterminado del emergente:

    <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>
    Sólo me ayudó a matar a dos pájaros con una piedra.
    Yo estaba encantado de ayudar 😉

    OriginalEl autor Danila Ganchar

  2. 4

    que puede hacer mejor el contexto podría ser dinámico cuando se utiliza un python método para abrir la ventana emergente que se vea el ejemplo en la odoo complementos :

    @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},
        }
    Es una buena solución. Gracias.
    usted bienvenido, mi amigo, soy nuevo en Odoo pero es muy fácil de aprender que hay un montón de gran ejemplo en odoo complementos

    OriginalEl autor EasyOdoo

  3. 1

    A la vista xml:

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

    y en model.py (los elementos):

    _defaults = {
        "res_id": lambda self,cr,uid,c:c.get('res_id',False)
    }
    Gracias por la solución.

    OriginalEl autor Alexander Kopylov

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea