搜索统一响应参数
This commit is contained in:
parent
5b9b6da042
commit
cc2c647044
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user