6

私は Odoo(v9) を使用しています。カスタムがあります:フォーム(モデル1の場合)、フォーム付きのアクションとポップアップ(モデル2の場合)。メインフォームの例:

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

ボタンOpen 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>

my_model_one

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

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

ポップアップフォーム:

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

私の質問は:メイン フォームのフィールドからポップアップ フォームに値を送信するにはどうすればよいですか?(partner_id)

コードでactive_id、文字列、または整数値を使用する方法を見ました。しかし、フィールド値を送信する方法や、カスタム ロジックのメソッドを登録する方法がわかりません。誰かが小さな例を提供できますか? 前もって感謝します。

4

3 に答える 3

11

解決策を見つけました。要素ボタンでは、次のようなコンテキストを追加する必要があります:

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

この後、デフォルト値を 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>
于 2016-01-21T15:35:18.240 に答える
4

Pythonメソッドを使用してポップアップを開くと、コンテキストが動的になる可能性があります。odooアドオンの例を参照してください。

@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},
    }
于 2016-07-12T18:59:43.580 に答える
1

ビュー xml で:

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

そしてmodel.py(アイテム)で:

_defaults = {
    "res_id": lambda self,cr,uid,c:c.get('res_id',False)
}
于 2016-12-06T14:46:38.167 に答える