diff --git a/apps/discovery/views.py b/apps/discovery/views.py index 9c25076..38b1b56 100644 --- a/apps/discovery/views.py +++ b/apps/discovery/views.py @@ -564,29 +564,36 @@ class CreatorDiscoveryViewSet(viewsets.ReadOnlyModelViewSet): for creator_data in api_results: # 根据API结果获取或创建CreatorProfile try: - profile_obj, created = CreatorProfile.objects.get_or_create( - name=creator_data.get('name', 'Unknown'), - defaults={ - 'avatar_url': creator_data.get('avatar_url'), - 'email': creator_data.get('email'), - 'instagram': creator_data.get('instagram'), - 'tiktok_link': creator_data.get('tiktok_link'), - 'location': creator_data.get('location'), - 'live_schedule': creator_data.get('live_schedule'), - 'category': creator_data.get('category'), - 'e_commerce_level': creator_data.get('e_commerce_level'), - 'exposure_level': creator_data.get('exposure_level'), - 'followers': creator_data.get('followers', 0), - 'gmv': creator_data.get('gmv', 0), - 'items_sold': creator_data.get('items_sold', 0), - 'avg_video_views': creator_data.get('avg_video_views', 0), - 'pricing': creator_data.get('pricing'), - 'pricing_package': creator_data.get('pricing_package'), - 'collab_count': creator_data.get('collab_count'), - 'latest_collab': creator_data.get('latest_collab'), - 'profile': creator_data.get('profile', 'tiktok') - } - ) + # 尝试查找CreatorProfile,使用filter和first而非get避免多个结果的问题 + profile_obj = CreatorProfile.objects.filter( + name=creator_data.get('name', 'Unknown') + ).first() + + # 如果没有找到,则创建一个新的 + if not profile_obj: + profile_obj = CreatorProfile.objects.create( + name=creator_data.get('name', 'Unknown'), + avatar_url=creator_data.get('avatar_url'), + email=creator_data.get('email'), + instagram=creator_data.get('instagram'), + tiktok_link=creator_data.get('tiktok_link'), + location=creator_data.get('location'), + live_schedule=creator_data.get('live_schedule'), + category=creator_data.get('category'), + e_commerce_level=creator_data.get('e_commerce_level'), + exposure_level=creator_data.get('exposure_level'), + followers=creator_data.get('followers', 0), + gmv=creator_data.get('gmv', 0), + items_sold=creator_data.get('items_sold', 0), + avg_video_views=creator_data.get('avg_video_views', 0), + pricing=creator_data.get('pricing'), + pricing_package=creator_data.get('pricing_package'), + collab_count=creator_data.get('collab_count'), + latest_collab=creator_data.get('latest_collab'), + profile=creator_data.get('profile'), + hashtags=creator_data.get('hashtags', ''), + trends=creator_data.get('trends', '') + ) # 检查是否已经在当前session中存在相同creator existing_creator = Creator.objects.filter( @@ -647,7 +654,7 @@ class CreatorDiscoveryViewSet(viewsets.ReadOnlyModelViewSet): # 只获取与搜索匹配的结果,而不是session中的所有creators matched_creators = Creator.objects.filter(id__in=matched_creator_ids) - # 创建原始外部API结果与Creator映射的响应 + # 创建统一的响应格式,与其他搜索接口保持一致 response_data = { "id": today_session.id, "session_number": today_session.session_number, @@ -657,14 +664,13 @@ class CreatorDiscoveryViewSet(viewsets.ReadOnlyModelViewSet): "avg_gmv": round(sum(c.gmv for c in matched_creators) / matched_creators.count(), 1) if matched_creators.count() > 0 else 0, "avg_video_views": round(sum(c.avg_video_views for c in matched_creators) / matched_creators.count(), 1) if matched_creators.count() > 0 else 0, "date_created": today_session.date_created, - "creators": CreatorSerializer(matched_creators, many=True).data, - "api_results": api_results # 包含原始API结果 + "creators": CreatorSerializer(matched_creators, many=True).data } - return ApiResponse.success(response_data, f"基于条件'{criteria}'搜索创作者成功") + return ApiResponse.success(response_data, f"搜索创作者成功") except Exception as e: import traceback - logger.error(f"Individual搜索时发生错误: {str(e)}") + logger.error(f"搜索时发生错误: {str(e)}") logger.error(traceback.format_exc()) return ApiResponse.error(f"搜索失败: {str(e)}", code=500)