From dcab4904207e0f2ca405c21b1d20648804307574 Mon Sep 17 00:00:00 2001 From: jlj <3042504846@qq.com> Date: Tue, 3 Jun 2025 15:34:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=85=AC=E6=9C=89=E8=BE=BE=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/daren_detail/views.py | 58 +++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/apps/daren_detail/views.py b/apps/daren_detail/views.py index 2870a87..86cac9f 100644 --- a/apps/daren_detail/views.py +++ b/apps/daren_detail/views.py @@ -2822,6 +2822,16 @@ def remove_creator_from_private_pool(request): # 通过关联ID删除 - 需要验证每个关联的权限 relations = PrivateCreatorRelation.objects.select_related('private_pool').filter(id__in=relation_ids) + # 检查是否找到要删除的记录 + if not relations.exists(): + return JsonResponse({ + 'code': 404, + 'message': '未找到指定的私有库达人关联记录', + 'data': { + 'relation_ids': relation_ids + } + }, json_dumps_params={'ensure_ascii': False}) + # 验证权限 for relation in relations: if relation.private_pool.user_id != current_user.id: @@ -2852,10 +2862,23 @@ def remove_creator_from_private_pool(request): 'data': None }, json_dumps_params={'ensure_ascii': False}) + # 查询要删除的记录 query = PrivateCreatorRelation.objects.filter( private_pool_id=pool_id, creator_id__in=creator_ids ) + + # 检查是否找到要删除的记录 + if not query.exists(): + return JsonResponse({ + 'code': 404, + 'message': '私有库中未找到指定的达人记录', + 'data': { + 'pool_id': pool_id, + 'creator_ids': creator_ids + } + }, json_dumps_params={'ensure_ascii': False}) + result_type = 'creator_ids' result_value = creator_ids else: @@ -3298,11 +3321,20 @@ def filter_private_pool_creators(request): @csrf_exempt @require_http_methods(["POST"]) def remove_from_public_pool(request): - """从公有达人库中移除达人,同时更新私有库中相关记录的状态""" + """从公有达人库中移除达人,同时删除所有用户私有库中的相关记录(仅管理员可操作)""" try: from .models import PublicCreatorPool, PrivateCreatorRelation, CreatorProfile import json + # 检查当前用户是否有管理员权限 + current_user = request.user + if not current_user.is_staff and not current_user.is_superuser: + return JsonResponse({ + 'code': 403, + 'message': '权限不足,只有管理员可以删除公有库达人', + 'data': None + }, json_dumps_params={'ensure_ascii': False}) + data = json.loads(request.body) # 获取必要参数 @@ -3335,18 +3367,17 @@ def remove_from_public_pool(request): # 查找所有私有库中引用此达人且标记为从公有库添加的记录 private_relations = PrivateCreatorRelation.objects.filter( creator=creator, - added_from_public=True, - status='active' # 只更新活跃状态的记录 + added_from_public=True ) - # 更新私有库中相关记录的状态为"已失效" - updated_private_count = 0 + # 记录受影响的用户数量 + affected_users = private_relations.values('private_pool__user_id').distinct().count() + + # 删除私有库中相关记录 + deleted_private_count = 0 if private_relations.exists(): - # 为了兼容性,可以选择添加新的状态或使用现有的archived状态 - # 这里我们添加一个新的状态值来明确表示"公有库已移除" - updated_private_count = private_relations.update( - status='public_removed' # 新增状态:公有库已移除 - ) + deleted_private_count = private_relations.count() + private_relations.delete() # 删除公有库记录 public_creator.delete() @@ -3360,8 +3391,9 @@ def remove_from_public_pool(request): 'name': creator.name }, 'removed_from_public': True, - 'updated_private_relations': updated_private_count, - 'note': f'已更新 {updated_private_count} 个私有库中的相关记录状态' + 'deleted_private_relations': deleted_private_count, + 'affected_users': affected_users, + 'note': f'已删除 {deleted_private_count} 个私有库中的相关记录,影响了 {affected_users} 个用户' } }, json_dumps_params={'ensure_ascii': False}) @@ -3376,8 +3408,6 @@ def remove_from_public_pool(request): }, json_dumps_params={'ensure_ascii': False}) - - @api_view(['GET']) @authentication_classes([CustomTokenAuthentication]) @csrf_exempt