修改响应格式
This commit is contained in:
parent
8768fd7421
commit
1d1e7cf760
@ -531,7 +531,7 @@ def get_creator_detail(request, creator_id):
|
||||
"name": creator.name,
|
||||
"avatar": creator.avatar_url,
|
||||
"email": creator.email,
|
||||
"social_user": {
|
||||
"social_accounts": {
|
||||
"instagram": creator.instagram, # 示例数据,实际应从数据库获取
|
||||
"tiktok": creator.tiktok_link # 示例链接
|
||||
},
|
||||
@ -2933,9 +2933,8 @@ def filter_public_creators(request):
|
||||
|
||||
# 平台过滤(tiktok, instagram, youtube等),单选
|
||||
platform = filter_data.get('platform')
|
||||
if platform and len(platform) > 0:
|
||||
platform_value = platform[0] # 单选,取第一个值
|
||||
public_creators = public_creators.filter(creator__profile=platform_value)
|
||||
if platform and platform:
|
||||
public_creators = public_creators.filter(creator__profile=platform)
|
||||
|
||||
# GMV范围过滤 ($0-$5k, $5k-$25k, $25k-$50k等),多选
|
||||
gmv_range = filter_data.get('gmv_range')
|
||||
@ -3173,9 +3172,8 @@ def filter_private_pool_creators(request):
|
||||
|
||||
# 平台过滤(tiktok, instagram, youtube等),单选
|
||||
platform = filter_data.get('platform')
|
||||
if platform and len(platform) > 0:
|
||||
platform_value = platform[0] # 单选,取第一个值
|
||||
creator_relations = creator_relations.filter(creator__profile=platform_value)
|
||||
if platform and platform:
|
||||
creator_relations = creator_relations.filter(creator__profile=platform)
|
||||
|
||||
# GMV范围过滤 ($0-$5k, $5k-$25k, $25k-$50k等),多选
|
||||
gmv_range = filter_data.get('gmv_range')
|
||||
@ -3557,31 +3555,8 @@ def search_creators(request):
|
||||
# 使用第一个关键词进行排序优化
|
||||
first_keyword = keywords[0] if 'keywords' in locals() and keywords else search_query
|
||||
|
||||
# 优化排序逻辑,支持单个字符的精确匹配
|
||||
query = query.extra(
|
||||
select={
|
||||
# 完全匹配优先级最高
|
||||
'name_exact_match': "CASE WHEN LOWER(creator_profiles.name) = LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 名称开头匹配优先级第二
|
||||
'name_starts_with': "CASE WHEN LOWER(creator_profiles.name) LIKE LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 名称包含匹配优先级第三
|
||||
'name_contains': "CASE WHEN LOWER(creator_profiles.name) LIKE LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 分类匹配优先级第四
|
||||
'category_match': "CASE WHEN LOWER(creator_profiles.category) LIKE LOWER(%s) THEN 1 ELSE 0 END"
|
||||
},
|
||||
select_params=[
|
||||
first_keyword,
|
||||
first_keyword + '%',
|
||||
'%' + first_keyword + '%',
|
||||
'%' + first_keyword + '%'
|
||||
]
|
||||
).order_by(
|
||||
'-name_exact_match',
|
||||
'-name_starts_with',
|
||||
'-name_contains',
|
||||
'-category_match',
|
||||
'creator__name'
|
||||
)
|
||||
# 简化排序逻辑,避免使用tiktok_link字段
|
||||
query = query.order_by('creator__name')
|
||||
else:
|
||||
# 如果没有搜索词,按名称排序
|
||||
query = query.order_by('creator__name')
|
||||
@ -3613,29 +3588,24 @@ def search_creators(request):
|
||||
# 格式化价格
|
||||
pricing_formatted = f"${creator.pricing}" if creator.pricing else None
|
||||
|
||||
# 格式化结果
|
||||
# 使用与filter_public_creators相同的格式
|
||||
formatted_creator = {
|
||||
"Creator": {
|
||||
"public_id": public_creator.id,
|
||||
"creator_id": creator.id,
|
||||
"name": creator.name,
|
||||
"avatar": creator.get_avatar_url()
|
||||
},
|
||||
"Category": creator.category,
|
||||
"E-commerce Level": e_commerce_level_formatted,
|
||||
"Exposure Level": creator.exposure_level,
|
||||
"Followers": followers_formatted,
|
||||
"GMV": gmv_formatted,
|
||||
"Items Sold": f"{creator.items_sold}k" if creator.items_sold else None,
|
||||
"Avg. Video Views": avg_views_formatted,
|
||||
"Pricing": pricing_formatted,
|
||||
"Pricing Package": creator.pricing_package,
|
||||
"# Collab": creator.collab_count,
|
||||
"Latest Collab.": creator.latest_collab,
|
||||
"E-commerce": creator.e_commerce_platforms,
|
||||
"creator_id": creator.id, # 添加ID用于后续操作
|
||||
"profile": creator.profile if hasattr(creator, 'profile') else 'tiktok', # 平台信息
|
||||
"public_pool_category": public_creator.category, # 公有库分类
|
||||
"public_pool_remark": public_creator.remark, # 公有库备注
|
||||
"is_public": True # 标识这是公有达人库的达人
|
||||
"avatar": creator.get_avatar_url(),
|
||||
"category": creator.category,
|
||||
"e_commerce_level": e_commerce_level_formatted,
|
||||
"exposure_level": creator.exposure_level,
|
||||
"platform": creator.profile if hasattr(creator, 'profile') else 'tiktok',
|
||||
"followers": followers_formatted,
|
||||
"gmv": gmv_formatted,
|
||||
"avg_video_views": avg_views_formatted,
|
||||
"pricing": pricing_formatted,
|
||||
"pricing_package": creator.pricing_package,
|
||||
"collab_count": creator.collab_count,
|
||||
"remark": public_creator.remark,
|
||||
"category_public": public_creator.category
|
||||
}
|
||||
creator_list.append(formatted_creator)
|
||||
|
||||
@ -3648,11 +3618,10 @@ def search_creators(request):
|
||||
"total_pages": total_pages,
|
||||
"total_count": total_count,
|
||||
"has_next": page < total_pages,
|
||||
"has_prev": page > 1,
|
||||
"page_size": page_size
|
||||
"has_prev": page > 1
|
||||
}
|
||||
|
||||
# 构造搜索信息
|
||||
# 构造搜索信息(可以作为额外信息保留)
|
||||
search_info = {
|
||||
"query": search_query,
|
||||
"keywords": keywords if 'keywords' in locals() else [],
|
||||
@ -3666,11 +3635,9 @@ def search_creators(request):
|
||||
return JsonResponse({
|
||||
'code': 200,
|
||||
'message': '搜索成功',
|
||||
'data': {
|
||||
'creators': creator_list,
|
||||
'data': creator_list,
|
||||
'pagination': pagination,
|
||||
'search_info': search_info
|
||||
}
|
||||
}, json_dumps_params={'ensure_ascii': False})
|
||||
|
||||
except Exception as e:
|
||||
@ -3813,31 +3780,8 @@ def search_private_creators(request):
|
||||
# 使用第一个关键词进行排序优化
|
||||
first_keyword = keywords[0] if 'keywords' in locals() and keywords else search_query
|
||||
|
||||
# 优化排序逻辑,支持单个字符的精确匹配
|
||||
query = query.extra(
|
||||
select={
|
||||
# 完全匹配优先级最高
|
||||
'name_exact_match': "CASE WHEN LOWER(creator_profiles.name) = LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 名称开头匹配优先级第二
|
||||
'name_starts_with': "CASE WHEN LOWER(creator_profiles.name) LIKE LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 名称包含匹配优先级第三
|
||||
'name_contains': "CASE WHEN LOWER(creator_profiles.name) LIKE LOWER(%s) THEN 1 ELSE 0 END",
|
||||
# 分类匹配优先级第四
|
||||
'category_match': "CASE WHEN LOWER(creator_profiles.category) LIKE LOWER(%s) THEN 1 ELSE 0 END"
|
||||
},
|
||||
select_params=[
|
||||
first_keyword,
|
||||
first_keyword + '%',
|
||||
'%' + first_keyword + '%',
|
||||
'%' + first_keyword + '%'
|
||||
]
|
||||
).order_by(
|
||||
'-name_exact_match',
|
||||
'-name_starts_with',
|
||||
'-name_contains',
|
||||
'-category_match',
|
||||
'creator__name'
|
||||
)
|
||||
# 简化排序逻辑,避免使用tiktok_link字段
|
||||
query = query.order_by('creator__name')
|
||||
else:
|
||||
# 如果没有搜索词,按名称排序
|
||||
query = query.order_by('creator__name')
|
||||
@ -3866,38 +3810,33 @@ def search_private_creators(request):
|
||||
followers_formatted = f"{int(creator.followers / 1000)}k" if creator.followers else "0"
|
||||
avg_views_formatted = f"{int(creator.avg_video_views / 1000)}k" if creator.avg_video_views else "0"
|
||||
|
||||
# 格式化价格
|
||||
pricing_formatted = f"${creator.pricing}" if creator.pricing else None
|
||||
# 格式化价格区间
|
||||
if creator.pricing is not None:
|
||||
pricing_range = f"${creator.pricing}"
|
||||
else:
|
||||
pricing_range = None
|
||||
|
||||
# 格式化结果
|
||||
# 格式化结果 - 使用与filter_private_pool_creators相同的格式
|
||||
formatted_creator = {
|
||||
"Creator": {
|
||||
"relation_id": relation.id,
|
||||
"creator_id": creator.id,
|
||||
"name": creator.name,
|
||||
"avatar": creator.get_avatar_url()
|
||||
},
|
||||
"Category": creator.category,
|
||||
"E-commerce Level": e_commerce_level_formatted,
|
||||
"Exposure Level": creator.exposure_level,
|
||||
"Followers": followers_formatted,
|
||||
"GMV": gmv_formatted,
|
||||
"Items Sold": f"{creator.items_sold}k" if creator.items_sold else None,
|
||||
"Avg. Video Views": avg_views_formatted,
|
||||
"Pricing": pricing_formatted,
|
||||
"Pricing Package": creator.pricing_package,
|
||||
"# Collab": creator.collab_count,
|
||||
"Latest Collab.": creator.latest_collab,
|
||||
"E-commerce": creator.e_commerce_platforms,
|
||||
"creator_id": creator.id, # 添加ID用于后续操作
|
||||
"profile": creator.profile if hasattr(creator, 'profile') else 'tiktok', # 平台信息
|
||||
"private_pool": {
|
||||
"id": relation.private_pool.id,
|
||||
"name": relation.private_pool.name,
|
||||
"is_default": relation.private_pool.is_default
|
||||
},
|
||||
"notes": relation.notes, # 私有库中的笔记
|
||||
"status": relation.status, # 私有库中的状态
|
||||
"relation_id": relation.id, # 关联ID
|
||||
"is_private": True # 标识这是私有达人库的达人
|
||||
"avatar": creator.get_avatar_url(),
|
||||
"category": creator.category,
|
||||
"e_commerce_level": e_commerce_level_formatted,
|
||||
"exposure_level": creator.exposure_level,
|
||||
"platform": creator.profile if hasattr(creator, 'profile') else 'tiktok',
|
||||
"followers": followers_formatted,
|
||||
"gmv": gmv_formatted,
|
||||
"avg_video_views": avg_views_formatted,
|
||||
"pricing": pricing_range,
|
||||
"collab_count": creator.collab_count,
|
||||
"notes": relation.notes,
|
||||
"status": relation.status,
|
||||
"added_from_public": relation.added_from_public,
|
||||
"added_at": relation.created_at.strftime('%Y-%m-%d'),
|
||||
"is_public_removed": relation.status == 'public_removed',
|
||||
"status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None
|
||||
}
|
||||
creator_list.append(formatted_creator)
|
||||
|
||||
@ -3910,8 +3849,7 @@ def search_private_creators(request):
|
||||
"total_pages": total_pages,
|
||||
"total_count": total_count,
|
||||
"has_next": page < total_pages,
|
||||
"has_prev": page > 1,
|
||||
"page_size": page_size
|
||||
"has_prev": page > 1
|
||||
}
|
||||
|
||||
# 构造搜索信息
|
||||
@ -3926,14 +3864,25 @@ def search_private_creators(request):
|
||||
"pool_id": pool_id # 返回当前搜索的池ID,如果有的话
|
||||
}
|
||||
|
||||
# 构造私有库信息(如果有特定池ID)
|
||||
pool_info = None
|
||||
if pool_id and 'pool' in locals():
|
||||
pool_info = {
|
||||
"id": pool.id,
|
||||
"name": pool.name,
|
||||
"description": pool.description,
|
||||
"is_default": pool.is_default,
|
||||
"user_id": pool.user_id,
|
||||
"created_at": pool.created_at.strftime('%Y-%m-%d')
|
||||
}
|
||||
|
||||
return JsonResponse({
|
||||
'code': 200,
|
||||
'message': '搜索成功',
|
||||
'data': {
|
||||
'creators': creator_list,
|
||||
'data': creator_list,
|
||||
'pagination': pagination,
|
||||
'search_info': search_info
|
||||
}
|
||||
'search_info': search_info,
|
||||
'pool_info': pool_info
|
||||
}, json_dumps_params={'ensure_ascii': False})
|
||||
|
||||
except Exception as e:
|
||||
|
Loading…
Reference in New Issue
Block a user