1

リスト ビューの Odoo ウィザードで、選択された (チェックされた) リスト アイテムから値を取得して別のレコードを更新するという問題が発生しています。たとえば、related_pa​​rtner_id という列を res_partner に追加しました。基本的には、マスターアカウント(パートナー)を分類するために使用されます。新しい顧客を追加するときに、マスター アカウントを割り当てることができるドロップダウンをセットアップしました。データベースは related_pa​​rtner_id を res_partner からの子アカウントの ID に更新します。

これが私が使用しているビューです。

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <!--Wizard view to assign new master account-->
        <record model="ir.ui.view" id="view_master_wizard_form">
            <field name="name">master.wizard.form</field>
            <field name="model">master.wizard</field>
            <field name="arch" type="xml">
                <form string="Assign New Parent">
                    <separator colspan="4" string="Update Parent"/>
                    <newline/>
                    <field name="related_partner_id"/>
                    <field name="parent_id" invisible="1"/>
                    <group col="4" colspan="4">
                        <button icon="gtk-cancel" special="cancel" string="Cancel"/>
                        <button icon="gtk-ok" name="change_master" string="Update" type="object"/>
                    </group>
                </form>
        </field>
    </record>
    <!--Add option to More dropdown in customer list viewt-->
    <act_window id="launch_res_partner" name="Assign New Master"
                src_model="res.partner"
                res_model="master.wizard"
                view_mode="form"
                view_type="form"
                target="new"
                key2="client_action_multi"/>
    <!--Action to change selected customers to the new master account-->
    <record id="action_change_master" model="ir.actions.act_window">
        <field name="name">Assign New Master Account</field>
        <field name="type">ir.actions.act_window</field>
        <field name="src_model">res.partner</field>
        <field name="res_model">master.wizard</field>
        <field name="view_type">form</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
    </record>
</data>

ここの Odoo ウィザード ガイドを参考にしました。データベースの master_wizard テーブルにエントリが書き込まれていることがわかりますが (どれだけチェックしても 1 つだけですが)、res_partner テーブルは更新されません。

4

1 に答える 1

1

上記の XML で動作するモデル クラスを次に示します。ID をループして、self 値からウィザードへの値を res.partner テーブルに設定するだけです。これはすべて新しい API です。少し手を加える必要があるかもしれませんが、今のところ問題なく動作します。同様に変更する必要があるため、parent_idを設定する必要がありました。

from openerp import models, fields, api


class master_wizard(models.TransientModel):
    _name = 'master.wizard'

    related_partner_id = fields.Many2one('res.partner', 'Master Account')
    parent_id = fields.Many2one('res.partner')
    related_partner_ids = fields.One2many('res.partner', 'related_partner_id')

    @api.multi
    def change_master(self):
        related_partner_ids = self.env['res.partner'].browse(self._context.get('active_ids'))
        for partner in related_partner_ids:
            partner.related_partner_id = self.related_partner_id
            partner.parent_id = self.related_partner_id
        return {}
于 2015-04-06T07:44:00.043 に答える