搜索统一响应参数

This commit is contained in:
wanjia 2025-05-23 18:06:17 +08:00
parent 5b9b6da042
commit cc2c647044

View File

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