第一次重写发生递归调用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()