Odoo无法在按钮点击时从向导打开表单视图

时间:2017-11-17 08:51:25

标签: python-2.7 openerp odoo-9 wizard

我创建了向导。按下按钮,我想打开具有特定模型记录ID的表单视图。

@api.multi
def create_order(self):
    view = self.env.ref('purchase.purchase_order_form')
    context = self.env.context
    return {
         'name':'Name',
         'type': 'ir.actions.act_window',
         'view_type': 'form',
         'view_mode': 'form',
         'res_model': 'purchase.order',
         'views': [(view.id, 'form')],
         'view_id': view.id,
         'res_id': 264,
         'context': context,
    }

问题是按钮点击后我无法打开其他表单视图。

如果我添加' target':' new',然后点击弹出窗口,我打开表单,我需要:

   @api.multi
    def create_order(self):
        view = self.env.ref('purchase.purchase_order_form')
        context = self.env.context
        return {
             'name':'Name',
             'type': 'ir.actions.act_window',
             'view_type': 'form',
             'view_mode': 'form',
             'res_model': 'purchase.order',
             'views': [(view.id, 'form')],
             'view_id': view.id,
             'target': 'new',
             'res_id': 264,
             'context': context,
        }

问题是按钮点击时我需要打开特定的表单,但是像弹出窗口一样。 我尝试过设置' target':' inline'或者'目标':'当前'但没有任何事情发生..

3 个答案:

答案 0 :(得分:0)

我认为问题将存在于你的param res_id中,实际上并不需要。它只返回res_id的记录,如果存在的话。无论如何我给你一个有效的例子。所以请尝试:

return {
        'name': _('Compose Email'),
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'mail.compose.message',
        'views': [(compose_form.id, 'form')],
        'view_id': compose_form.id,
        'target': 'new',
        'context': ctx,
    }

答案 1 :(得分:0)

这是从哪个模型/记录调用的?例如,您是将其添加到销售订单还是其他某种型号的表单?

如果是这样,您可能需要设置包含源模型,例如:

'src_model': 'sale.order',

documentation中,这用于启动向导,重定向模型需要可能

答案 2 :(得分:0)

在简单解决方案的回应结束时看到

我遇到了同样的问题,但我能够解决它。我必须说我使用的是旧的OpenERP版本(5.0.14),所以它可能不适合你。

    model_obj = self.pool.get('ir.model.data')
    res_id = model_obj.get_object_reference(cursor, uid,
                                            'your_model',
                                            'your_view_id_ref_defined_in_xml')[1]

    return {
        'name': 'View name, anything you want',
        'type': 'ir.actions.act_window',
        'res_model': 'view_model',
        'domain': "[('id', 'in', {})]".format(ids_to_show),
        'view_type': 'form',
        'view_id': (res_id, 'View'),
    }

使用问题示例,它将是:

    model_obj = self.pool.get('ir.model.data')
    res_id = model_obj.get_object_reference(cursor, uid,
                                            'purchase',
                                            'purchase_order_form')[1]

    return {
        'name': 'View name, anything you want',
        'type': 'ir.actions.act_window',
        'res_model': 'purchase.order',
        'view_type': 'form',
        'view_id': (res_id, 'View'),
    }

希望它有所帮助!

SIMPLER SOLUTION

另一种更简单,更简洁的解决方案是将view_id设置为False并设置要在上下文中加载的视图。您可以使用&#39; tree_view_ref&#39; 指定要为树部件加载的视图,使用&#39; form_view_ref&#39; 指定表单部件。< / p>

以下示例加载名为 custom_stock 的模块中定义的名为 custom_stock_tree_view custom_stock_form_view 的视图

   return {
        'name': 'Custom Stocks',
        'view_type': 'form',
        'view_mode': 'tree,form',
        'res_model': 'stock.move',
        'view_id': False,
        'type': 'ir.actions.act_window',
        'context': {
            'tree_view_ref':
                'custom_stock.custom_stock_tree_view',
            'form_view_ref':
                'custom_stock.custom_stock_form_view'
        }
    }

请注意,view_id设置为False。否则它将无法加载所需的视图(感谢Joan M. Grande,他看到了这一点)。