1

大家好,我尝试覆盖销售订单行的取消链接方法。已调用函数但未删除引发 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()

提前致谢。

4

2 回答 2

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 execution the super write?中讨论了类似的内容?

希望这能回答你的问题

于 2018-03-18T17:55:08.560 回答
1

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

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

据我了解,您想通过验证意味着您不希望 odoo 调用 unlink your unlink method ---> models.Model unlink

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

    return models.Model.unlink(self)
于 2018-03-17T09:00:28.487 回答