如何在odoo10中覆盖销售订单的取消链接方法

时间:2018-03-17 06:37:50

标签: odoo odoo-10 unlink raiserror

大家好我试图覆盖销售订单行的取消链接方法。调用函数但未提取UserError验证。

Odoo默认功能:

@api.multi
def unlink(self):
    if self.filtered(lambda x: x.state in ('sale', 'done')):
        raise UserError(_('You can not remove a sale order line.\nDiscard changes and try setting the quantity to 0.'))
    return super(SaleOrderLine, self).unlink()

自定义覆盖功能:

@api.multi
def unlink(self):
    if self.filtered(lambda x: x.state in ('sale', 'done')):
        pass
    return super(test, self).unlink()

提前致谢。

2 个答案:

答案 0 :(得分:1)

继承模型并覆盖方法时。你打电话给super odoo保持chaning。

在你的情况下,odoo调用your method --> sale.order method --> models.Model method

根据我的理解,您希望通过验证意味着您不希望odoo调用取消链接your unlink method ---> models.Model unlink

不要使用超级尝试这个我认为它应该工作,如果不是我会显示其他解决方案

    return models.Model.unlink(self)

答案 1 :(得分:1)

正如Cherif建议的那样,您可以通过super继承工作流程中的任何步骤。
在您的情况下,如果您想直接调用models.Model unlink方法,请尝试以下方式:

@api.multi
def unlink(self):
    if self.filtered(lambda x: x.state in ('sale', 'done')):
        pass
    return super(models.Model, self).unlink()

How can override write method without executing the super write?

中讨论了类似的内容

希望这已经回答了你的问题