单击按钮时如何在新模型上打开新窗口?

时间:2017-03-19 15:23:17

标签: model window action odoo-8

我在 product.template 看板视图上创建了一个新按钮。该按钮在看板视图的每个产品下正确显示。

当用户点击其中一个按钮时,我想在表单视图中使用产品变量(product.product model)id 1362。

上下文很好地传递给了行动。我已经验证了日志信息。但是新窗口没有打开。当我单击按钮时,我在日志中看到触发了操作但新窗口没有出现。没错。

按钮的XML:

<record id="product_template_kanban_view_inherited" model="ir.ui.view">
    <field name="name">Product.template.kanban.view.inherited</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_kanban_view" />
    <field name="arch" type="xml">
        <xpath expr="//div[@name='tags']" position="after"> 
            <button name="open_product_variant" string="test" context="{'res_id': 1362}" type="object" />
        </xpath>
    </field>
</record>

Python的动作:

from openerp import models, fields, api
import logging
_logger = logging.getLogger(__name__)

class product_template(models.Model):
    _inherit = "product.template"

    @api.one
    def open_product_variant(self):
        _logger.error("open_product_variant")

        resid = self._context.get('res_id')
        _logger.error("    resid :: %s", str(resid))

        res = {
            'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'view_type': 'form',
            'res_model': 'product.product',
            'target': 'current',
            'res_id': resid,
            'view_id': False,
            'domain': False,
        }

        return res

按钮图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

我试图在旧的api中重新定义我的python方法,并且它在第一次拍摄时起作用! 我知道原始的product.template类在odoo 8中继承了osv.osv。对我来说,这意味着这个类是用旧的api编写的。 有时我设法用新api覆盖一些旧类,但这一次,我会忘记它。 我总是喜欢使用新的API。

如果有人设法纠正我上面的代码(新api),我会改为使用它。

我的Python代码

import logging
_logger = logging.getLogger(__name__)

from openerp.osv import osv


class product_template(osv.osv):
    _inherit = "product.template"

    def test(self, cr, uid, ids, context=None):
        _logger.error("open_product_variant")

        resid = context.get('res_id')
        _logger.error("    resid :: %s", str(resid))

        res = {
            'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'view_type': 'form',
            'res_model': 'product.product',
            'target': 'current',
            'res_id': resid,
            'view_id': False,
            'domain': False,  
        }

        return res