31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""报表公共工具函数"""
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _id_list(val):
|
|
"""将参数标准化为扁平整数列表,用于多选场景下 'in' 操作符
|
|
|
|
- 列表/元组 → 递归展平后返回列表(防止 [[20, 30]] 嵌套导致 SQL 类型错误)
|
|
- 单个整数 → [val]
|
|
- None/False/0/空字符串 → [](空列表,使 if partner_id 为 False,不追加条件)
|
|
|
|
单选时 _id_list(20) → [20],配合 'in' [20] 等价于原来的 = 20,数据一致
|
|
多选时 _id_list([20, 30]) → [20, 30],配合 'in' [20, 30] 正常
|
|
嵌套时 _id_list([[20, 30]]) → [20, 30],防止 psycopg2 把 list 转为 ARRAY 导致 SQL 类型错误
|
|
"""
|
|
if isinstance(val, (list, tuple)):
|
|
result = []
|
|
for item in val:
|
|
# 递归展平嵌套的列表/元组
|
|
if isinstance(item, (list, tuple)):
|
|
result.extend(_id_list(item))
|
|
elif item is not None and item is not False and item != 0 and item != '':
|
|
result.append(item)
|
|
return result
|
|
if val is None or val is False or val == 0 or val == '':
|
|
return []
|
|
return [val]
|