Files
gzth/yuthon_report/models/report_utils.py
T
2026-06-17 18:01:58 +08:00

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]