出问题的代码如下
for disp_name in self.filter.field_dict:
filter_text = filter_text.replace(disp_name,self.fields[disp_name].where_name)
乍一看没什么问题, 但是当 disp_name 的值 与前一个 disp_name 所对应的 where_name 部分或者全部相等时就会出现 重复替换的问题 例如下面这段执行结果
filter_text #开始之前 filter_text 的值为:
"(Disp_order_date = '1') and ((Order_date > '2019-01-01') and (Cust_no = 'wu~~~~'))"
filter_text # 第一次执行 此时 disp_name 为 disp_order_date
"($0.Order_date = '1') and ((Order_date > '2019-01-01') and (Cust_no = 'wu~~~~'))"
filter_text # 第二次执行 此时disp_name 为 Order_date 显然与前一个发生了重复
"($0.$0.Order_date = '1') and (($0.Order_date > '2019-01-01') and (Cust_no = 'wu~~~~'))"
解决办法其实很直接, 加盐, 统一改变 disp_name的值 如下所示
for disp_name in self.filter.field_dict:
#filter_text = filter_text.replace(disp_name,self.fields[disp_name].where_name)
filter_text = filter_text.replace(disp_name,f"""{{{disp_name}}}""")
for disp_name in self.filter.field_dict:
filter_text = filter_text.replace(f"""{{{disp_name}}}""",self.fields[disp_name].where_name)
执行结果如下:
filter_text
"({Disp_order_date} = '1') and (({Order_date} > '2019-01-01') and ({Cust_no} = 'wu~~~~'))"
filter_text
"($0.Order_date = '1') and (($0.Order_date > '2019-01-01') and ($218.Unit_no = 'wu~~~~'))"
那么 问题解决.o( ̄▽ ̄)o
网友评论