From af85cc7b5668e0854e565353e5dab71d6e22c27d Mon Sep 17 00:00:00 2001 From: jlj <3042504846@qq.com> Date: Wed, 11 Jun 2025 11:57:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/daren_detail/views.py | 97 ++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/apps/daren_detail/views.py b/apps/daren_detail/views.py index fbcddf5..6bc263b 100644 --- a/apps/daren_detail/views.py +++ b/apps/daren_detail/views.py @@ -2483,13 +2483,7 @@ def get_private_pool_creators(request, pool_id=None): # 检查pool_id是否提供 if not pool_id: pool_id = request.GET.get('pool_id') - if not pool_id: - return JsonResponse({ - 'code': 400, - 'message': '缺少必要参数: pool_id', - 'data': None - }, json_dumps_params={'ensure_ascii': False}) - + # 获取分页参数 page = int(request.GET.get('page', 1)) page_size = int(request.GET.get('page_size', 10)) @@ -2498,23 +2492,49 @@ def get_private_pool_creators(request, pool_id=None): status = request.GET.get('status', 'active') # 默认只获取活跃状态的达人 keyword = request.GET.get('keyword') - # 查询私有库信息并验证所有权 - try: - private_pool = PrivateCreatorPool.objects.get( - id=pool_id, - user_id=current_user.id # 确保只能访问当前用户的私有库 - ) - except PrivateCreatorPool.DoesNotExist: - return JsonResponse({ - 'code': 404, - 'message': f'找不到ID为 {pool_id} 的私有库或无权限访问', - 'data': None - }, json_dumps_params={'ensure_ascii': False}) - - # 查询私有库中的达人关联 - creator_relations = PrivateCreatorRelation.objects.filter( - private_pool=private_pool - ).select_related('creator') + pool_info = None + creator_relations = None + + if pool_id: + # 查询特定私有库信息并验证所有权 + try: + private_pool = PrivateCreatorPool.objects.get( + id=pool_id, + user_id=current_user.id # 确保只能访问当前用户的私有库 + ) + + # 构造私有库信息 + pool_info = { + "id": private_pool.id, + "name": private_pool.name, + "description": private_pool.description, + "is_default": private_pool.is_default, + "user_id": private_pool.user_id, + "created_at": private_pool.created_at.strftime('%Y-%m-%d') + } + + # 查询私有库中的达人关联 + creator_relations = PrivateCreatorRelation.objects.filter( + private_pool=private_pool + ).select_related('creator') + + except PrivateCreatorPool.DoesNotExist: + return JsonResponse({ + 'code': 404, + 'message': f'找不到ID为 {pool_id} 的私有库或无权限访问', + 'data': None + }, json_dumps_params={'ensure_ascii': False}) + else: + # 不指定pool_id时,查询用户所有私有库中的达人 + # 获取当前用户的所有私有库ID + user_pool_ids = PrivateCreatorPool.objects.filter( + user_id=current_user.id + ).values_list('id', flat=True) + + # 查询所有私有库中的达人关联 + creator_relations = PrivateCreatorRelation.objects.filter( + private_pool_id__in=user_pool_ids + ).select_related('creator', 'private_pool') # 应用过滤条件 if status: @@ -2578,7 +2598,8 @@ def get_private_pool_creators(request, pool_id=None): "added_from_public": relation.added_from_public, "added_at": relation.created_at.strftime('%Y-%m-%d'), "is_public_removed": relation.status == 'public_removed', # 添加公有库移除标识 - "status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None # 状态说明 + "status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None, # 状态说明 + "pool_name": relation.private_pool.name if not pool_id else None # 当查询所有库时,返回所属库名称 } creator_list.append(formatted_creator) @@ -2594,23 +2615,18 @@ def get_private_pool_creators(request, pool_id=None): "has_prev": page > 1 } - # 构造私有库信息 - pool_info = { - "id": private_pool.id, - "name": private_pool.name, - "description": private_pool.description, - "is_default": private_pool.is_default, - "user_id": private_pool.user_id, - "created_at": private_pool.created_at.strftime('%Y-%m-%d') - } - - return JsonResponse({ + response_data = { 'code': 200, 'message': '获取成功', 'data': creator_list, - 'pagination': pagination, - 'pool_info': pool_info - }, json_dumps_params={'ensure_ascii': False}) + 'pagination': pagination + } + + # 只有在指定了pool_id的情况下才返回pool_info + if pool_info: + response_data['pool_info'] = pool_info + + return JsonResponse(response_data, json_dumps_params={'ensure_ascii': False}) except Exception as e: logger.error(f"获取私有库达人列表失败: {e}") @@ -3459,7 +3475,8 @@ def filter_private_pool_creators(request): "added_from_public": relation.added_from_public, "added_at": relation.created_at.strftime('%Y-%m-%d'), "is_public_removed": relation.status == 'public_removed', # 添加公有库移除标识 - "status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None # 状态说明 + "status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None, # 状态说明 + "pool_name": relation.private_pool.name if not pool_id else None # 当查询所有库时,返回所属库名称 } creator_list.append(formatted_creator)