搜索统一响应参数

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:
# 根据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)