gpt4 book ai didi

python - 如何覆盖自定义模块的 ORM 方法取消链接?

转载 作者:行者123 更新时间:2023-11-28 18:28:07 24 4
gpt4 key购买 nike

我想覆盖 stock.move 模型的 unlink 方法。原因是我想删除警告禁止操作的 OSV 异常,并将其替换为其他消息和其他条件。

这是原始代码:

def unlink(self, cr, uid, ids, context=None):
context = context or {}
for move in self.browse(cr, uid, ids, context=context):
if move.state not in ('draft', 'cancel'):
raise osv.except_osv(_('User Error!'), _('You can only delete draft moves.'))
return super(stock_move, self).unlink(cr, uid, ids, context=context)

我刚刚意识到删除该消息比我想象的要复杂。这是我当前的代码,它正在检查我的条件,然后检查我想避免的原始代码:

class StockMove(models.Model):
_inherit = 'stock.move'

@api.multi
def unlink(self):
for move in self:
if move.lot_id and move.lot_id.any_unit_sold is True:
raise Warning(_('You can only delete unsold moves.'))
return super(StockMove, self).unlink()

如果我将最后一行 (super) 变成 self.unlink(),我会得到一个超过最大递归深度错误。

如何通过我的自定义模块管理我的目的?

最佳答案

不使用 super() 调用可能会出现意外行为。您可以调用 models.Model.unlink(),但这将跳过其他模块对 stock.move 的所有 unlink() 扩展(甚至Odoo S.A. 应用程序/模块)。在您的情况下,它将是:

class StockMove(models.Model):
_inherit = 'stock.move'

@api.multi
def unlink(self):
for move in self:
if move.lot_id and move.lot_id.any_unit_sold is True:
raise Warning(_('You can only delete unsold moves.'))
return models.Model.unlink(self)

另一种可能性是对原始代码进行猴子补丁。

关于python - 如何覆盖自定义模块的 ORM 方法取消链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com