解决odoo中重写write方法出现递归调用write方法的情况

第一次重写发生递归调用write方法:

    def write(self, vals):
        res = super(BiSQLView, self).write(vals)
        self.button_validate_sql_expression()
        return res

解决方法:

    def write(self, vals):
        res = super(BiSQLView, self).write(vals)
        # 添加以下三行代码
        if self._context.get('loopbreaker'):
            return True
        self=self.with_context(loopbreaker=True)

        self.button_validate_sql_expression()
        return res

解析

自定义一个flag标记,
走第一遍write方法的时候

    def write(self, vals):
        res = super(BiSQLView, self).write(vals)
        # 添加以下三行代码
        if self._context.get('loopbreaker'): # false
            return True # 执行不到
        self=self.with_context(loopbreaker=True) # loopbreaker被置为True

        self.button_validate_sql_expression()
        return res

之后走write的时候

    def write(self, vals):
        res = super(BiSQLView, self).write(vals)
        # 添加以下三行代码
        if self._context.get('loopbreaker'): #True
            return True # return True  后面的代码执行不到
        self=self.with_context(loopbreaker=True)

        self.button_validate_sql_expression()
        return res

此举保证了新添加的逻辑代码只被执行一次

self.button_validate_sql_expression()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容