超过最大递归深度 Odoo

maximum recursion depth exceeded Odoo

class SomeOrder(models.Model):
    _inherit = 'some.order'

    @api.multi
    def write(self, vals):
        result = super(SomeOrder, self).write(vals)
        for rec in self:
            rec.update_other_order()
        return result

    @api.model
    def update_pos_quatation(self):
        # my logic.write

class OtherOrder(models.Model):
    _inherit = "other.order"

    @api.multi
    def write(self, vals):
        result = super(OtherOrder, self).write(vals)
        if 'amount_paid' in vals:
            self.update_Some_order()
        return result

    @api.model
    def update_some_order(self):
        # my logic.write

我有方法在最后将 vals 写入销售订单,但我覆盖了另一种更新销售订单的方法的销售写入方法。问题是我得到“超过最大递归深度”,因为 update_sales_order 触发了一些方法。我怎样才能避免这个递归错误?可能我需要添加一些上下文来编写方法

所以基本上这两种方法都用 write 互相调用。

这里你只需要一个终止或中断条件。

例如,如果您在某个特殊字段值更改时调用另一个写入逻辑,则不会再次更改该字段值:

@api.multi
def write(self, vals):
    res = super(MyModel, self).write(vals)
    if 'my_trigger_field_name' in vals:
        self.my_other_logic(vals)

@api.multi
def my_other_logic(self, vals):
    my_trigger_field_value = vals.get('my_trigger_field_name')
    if my_trigger_field_value == 1:
        self.write({'another_field': 2})

或者如果您必须更改必须写入的值,只需使用上下文来停止递归:

@api.multi
def write(self, vals):
    res = super(MyModel, self).write(vals)
    if 'stop_write_recursion' not in self.env.context:
        self.my_other_logic(vals)

@api.multi
def my_other_logic(self, vals):
    # get values to write
    self.with_context(stop_write_recursion=1).write(other_values)