优化案件搜索的标签搜索

This commit is contained in:
ddrwode
2026-02-05 15:41:44 +08:00
parent 6c4cdf9daa
commit f0a52cd07b

View File

@@ -1786,8 +1786,8 @@ class caseManagementDetail(APIView):
serialnumber = request.data.get('contract_no')
party_name = request.data.get('party_name')
client_name = request.data.get('client_name')
tags = request.data.get('tags') # 标签名称模糊匹配
tag_ids = request.data.get('tag_ids') # 标签ID列表,匹配拥有任一标签的案件
tags = request.data.get('tags') # 标签:传字符串为名称模糊匹配,传数组 [2,3] 为标签ID列表
tag_ids = request.data.get('tag_ids') # 标签ID列表(与 tags 传 ID 时等效)
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
@@ -1804,12 +1804,18 @@ class caseManagementDetail(APIView):
Q_obj &= Q(party_name__icontains=party_name)
if client_name:
Q_obj &= Q(client_name__icontains=client_name)
# 按标签搜索:支持标签名称模糊匹配(tags) 和 标签ID列表(tag_ids),满足其一即可
# 按标签搜索:tags 可为字符串(名称模糊)或数组(标签ID如 [2,3])tag_ids 为标签ID列表满足任一标签即匹配
tag_id_list = []
if tags:
tag_id_list.extend(
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
)
if tags is not None and tags != '':
if isinstance(tags, list):
try:
tag_id_list.extend([int(x) for x in tags if x is not None and str(x).strip() != ''])
except (ValueError, TypeError):
pass
elif isinstance(tags, str):
tag_id_list.extend(
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
)
if tag_ids:
try:
if isinstance(tag_ids, str):
@@ -1818,7 +1824,7 @@ class caseManagementDetail(APIView):
tag_id_list.extend([int(x) for x in tag_ids if x is not None and str(x).strip() != ''])
except (ValueError, TypeError):
pass
tag_id_list = list(set(tag_id_list))
tag_id_list = list(set(tag_id_list))
if tag_id_list:
Q_obj &= Q(tags__in=tag_id_list)
@@ -2408,27 +2414,29 @@ class CaseDropdownList(APIView):
"""
获取案件列表(用于下拉选择)
返回案件数据,格式简洁,适合下拉列表使用。
可选按标签筛选:传 tags标签名称模糊)或 tag_ids标签ID列表/逗号分隔),匹配拥有任一标签的案件。
可选按标签筛选:传 tags字符串为名称模糊,数组如 [2,3] 为标签ID或 tag_ids,匹配拥有任一标签的案件。
:param request: 可选 state, tags, tag_ids
:return:
"""
# 可选参数:状态过滤
state_filter = request.data.get('state', None) # 可以按状态过滤,如"已通过"
tags = request.data.get('tags') # 标签名称模糊匹配
tag_ids = request.data.get('tag_ids') # 标签ID列表
state_filter = request.data.get('state', None)
tags = request.data.get('tags') # 字符串=名称模糊,数组=标签ID如 [2,3]
tag_ids = request.data.get('tag_ids')
# 查询未删除的案件
Q_obj = Q(is_deleted=False)
if state_filter:
Q_obj &= Q(state=state_filter)
# 按标签筛选(可选)
tag_id_list = []
if tags:
tag_id_list.extend(
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
)
if tags is not None and tags != '':
if isinstance(tags, list):
try:
tag_id_list.extend([int(x) for x in tags if x is not None and str(x).strip() != ''])
except (ValueError, TypeError):
pass
elif isinstance(tags, str):
tag_id_list.extend(
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
)
if tag_ids:
try:
if isinstance(tag_ids, str):
@@ -2437,7 +2445,7 @@ class CaseDropdownList(APIView):
tag_id_list.extend([int(x) for x in tag_ids if x is not None and str(x).strip() != ''])
except (ValueError, TypeError):
pass
tag_id_list = list(set(tag_id_list))
tag_id_list = list(set(tag_id_list))
if tag_id_list:
Q_obj &= Q(tags__in=tag_id_list)