diff --git a/business/views.py b/business/views.py index 02ab430..dd9a020 100644 --- a/business/views.py +++ b/business/views.py @@ -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)