it-swarm.com.de

odoo Kontextfeld. Standardwert für Popup

Ich arbeite mit Odoo (v9). Ich habe benutzerdefiniert: form (für Modell 1), Aktion und Popup mit Formular (für Modell 2). Hier Beispiel Hauptformular:

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

Fensteraktion für die Schaltfläche Popup öffnen :

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

Beispiel my_model_one

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

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

Popup-Formular:

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

Meine Frage ist: Wie kann ich Wert von Feld im Hauptformular zum Popup-Formular senden? (Partner_id)

Ich habe gesehen, wie im Code active_id , string oder integer Werte verwendet werden. Aber ich habe nicht gefunden, wie man Feldwerte sendet oder wie man die Methode für benutzerdefinierte Logik registriert. Kann jemand ein kleines Beispiel geben? Danke im Voraus.

6
Danila Ganchar

Ich habe die Lösung gefunden. In der Elementschaltfläche muss context wie folgt hinzugefügt werden:

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

Danach müssen wir den Standardwert auf popup setzen:

<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>
9
Danila Ganchar

wenn Sie eine Python-Methode verwenden, um das Popup zu öffnen, können Sie den Kontext dynamischer gestalten. Siehe Beispiel in den odoo-Addons:

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

In Ansicht xml:

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

und in model.py (items):

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