【问题标题】:odoo return wizard from onchange methododoo 从 onchange 方法返回向导
【发布时间】:2018-02-06 01:02:27
【问题描述】:

根据我的阅读,您无法从 onchange 函数返回操作。但是当用户在订单行中更改产品时,我想显示某种对话框。目标是检查产品是否包含 has_newproduct = True。在这种情况下,我想询问用户是否要删除原始产品(因为不需要)。

我正在重写采购订单行的 onchange 函数,如下所示:

class api_advanced(models.Model):

_inherit = "purchase.order.line"
has_newproduct = fields.Boolean("New Product")

@api.onchange('product_id')
def onchange_product_id(self):
    _logger.debug("------------------- OLD PRODUCT ID ----------------")
    _logger.debug(self._origin.product_id)
    _logger.debug(self._origin.has_newproduct)
    _logger.debug("------------------- NEW PRODUCT ID ----------------")
    _logger.debug(self.product_id)
    _logger.debug(self.has_newproduct)
    # Code to fire wizard is here but it does nothing...

我将如何完成类似的事情?还是我必须做一些完全不同的事情?我可以不问就删除产品,但这不是这里的真正目标......

【问题讨论】:

    标签: python onchange product odoo


    【解决方案1】:

    如何打开向导。当您单击按钮 odoo 调用方法时, 方法将字典返回到客户端。客户端将 检查返回值。客户端知道这是一个打开视图的动作。

    我想说的是这种行为是在 javascript 中定义的,所以如果你 想要一些类似的东西,你应该扩展表单视图来处理 onchange 事件的返回值以打开向导。

    或者您可以在树视图中添加一个按钮,其中包含文本删除原始产品 该按钮仅在has_newproduct = True 时才会出现(使用相关字段将其添加到树中,以便您可以在attrs 中使用它)。用户会知道他可以删除原来的 产品,如果他看到那个按钮,你可以添加确认消息来解释什么 是该操作的结果。

    【讨论】:

    • 我喜欢按钮的想法,但我发现了 2 个问题。如果用户将看到该按钮,则他不能删除链接到采购订单行的产品。所以他应该只有在更改产品后才能做到这一点。其次,假设您仅在产品更改时才显示按钮,那么您如何知道以前的产品 ID?
    • 不了解您的需求。但是如果你想知道以前的产品你需要先保存它。当用户更改产品时添加一个字段以购买订单将其保存在该字段中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多