【问题标题】:Odoo can't open form view from wizard on button clickOdoo 无法在按钮单击时从向导打开表单视图
【发布时间】:2018-04-30 23:46:06
【问题描述】:

我已经创建了向导。在按钮单击时,我想打开具有特定模型记录 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,
        }

问题是在按钮单击时我需要打开特定的表单,但就像弹出窗口一样。 我试过 set 'target': 'inline' 或 'target': 'current' 但没有任何反应..

【问题讨论】:

  • 尝试从 dict 'views' 、 'target' 、 'res_id' 中删除键并为键 'view_id' 赋值: False 并再次重新加载。

标签: python-2.7 openerp odoo-9 wizard


【解决方案1】:

我认为问题出在您的参数 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,
    }

【讨论】:

  • 感谢您的回答。正如我在问题中所说,如果我使用“目标”:“新”一切正常,但我不想在弹出窗口中打开我的表单...
  • 那么我可以看到没有问题,你可以使用target =“current”。这应该有效。
【解决方案2】:

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

如果有,可能需要设置include Source Model,如:

'src_model': 'sale.order',

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

【讨论】:

  • 问题是当我单击向导弹出视图上的按钮以打开新视图时。
【解决方案3】:

在回复的末尾查看更简单的解决方案

我遇到了同样的问题,但我能够解决它。我必须说我使用的是旧的 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'),
    }

希望对你有帮助!

更简单的解决方案

另一个可能更简单、更清晰的解决方案是将 view_id 设置为 False 并设置要在上下文中加载的视图。您可以使用 'tree_view_ref' 指定要为树部分加载的视图,使用 'form_view_ref' 指定表单部分。

这是一个加载视图的示例,名为 custom_stock_tree_viewcustom_stock_form_view 定义在名为 custom_stock的模块中

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

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2016-03-28
    • 2018-03-07
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2021-07-28
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多