【问题标题】:How to call a wizard from other wizard in Odoo8?如何从 Odoo8 中的其他向导调用向导?
【发布时间】:2016-10-11 08:38:52
【问题描述】:

我有一个向导,其中有一个 one2many 字段。我在 one2many 的每一行都做了一个按钮,它调用了我制作的另一个向导。此向导用于修改选定行的某些值。

我的目的是在您单击我的向导的应用按钮时返回第一个向导,并进行新的更改。

例子:

第一个向导有一个 one2many 字段,其中包含三个记录:

  • 产品A | 1 ud |源位置 X |目标位置 Y |地块 A1
  • 产品B | 2 ud |源位置 X |目标位置 Y |地块 B1
  • 产品C | 3 ud |源位置 X |目标位置 Y |地块 C1

现在,我点击我制作的第一行按钮(每行都有一个),然后 我的向导打开了。在这里我可以修改第一行的很多( 一个与产品 A)。想象一下,我设置了 Lot A0 并点击 Apply

我应该返回父向导,看到相同的数据,除了 所做的更改。所以结果将是:

  • 产品A | 1 ud |源位置 X |目标位置 Y | 批次 A0
  • 产品B | 2 ud |源位置 X |目标位置 Y |地块 B1
  • 产品C | 3 ud |源位置 X |目标位置 Y |地块 C1

有谁知道如何做到这一点?如何保留第一个向导数据?

【问题讨论】:

  • 如何使用按钮打开“行”向导:通过返回动作字典?如果是这样,只需通过单击“应用”将父向导作为操作字典(目标“新”)返回,应该是按钮类型“对象”,就像其他按钮一样。
  • 对给出的答案有任何反馈吗?

标签: python python-2.7 odoo-8 odoo


【解决方案1】:

首先你需要浏览Wizard的当前记录及其所在行。之后根据需要写入值。

使用向导对象返回当前 id。

尝试以下技巧:

#apply button method logic
def apply_data(self, cr, uid, ids, context=None):
    if not context:
        context = {}

    ctx = context.copy()
    for wizard in self.browse(cr, uid, ids[0], context=context):
        for line in wizard.one2many_field:
            line.write({
                'field_name': field_value
            })

    dummy, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'module_name', 'wizard_form_view_name')
    return {
        'name':_("Name of your Wizard"),
        'view_mode': 'form',
        'view_id': view_id,
        'view_type': 'form',
        'res_id': ids and ids[0] or False,
        'res_model': 'wizard.object.name',
        'type': 'ir.actions.act_window',
        'nodestroy': True,
        'target': 'new',
        'context': ctx
    }

注意:

您也可以更新上下文值。

应用按钮类型必须是对象才能执行方法逻辑。

【讨论】:

  • 谢谢!我猜apply_data 一定是从自定义向导中的Apply 按钮调用的方法。但是在这个自定义向导中没有 One2many 字段。 One2many 字段位于“父”向导中。
猜你喜欢
  • 2015-03-12
  • 2018-05-16
  • 2021-12-14
  • 1970-01-01
  • 2016-06-28
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多