from rest_framework import serializers from .models import CreatorProfile class CreatorProfileSerializer(serializers.ModelSerializer): """创作者资料序列化器,包含头像处理""" avatar_display_url = serializers.SerializerMethodField() class Meta: model = CreatorProfile fields = [ 'id', 'name', 'avatar', 'avatar_url', 'avatar_display_url', 'email', 'instagram', 'tiktok_link', 'location', 'live_schedule', 'category', 'e_commerce_level', 'exposure_level', 'followers', 'gmv', 'items_sold', 'avg_video_views', 'pricing', 'pricing_package', 'collab_count', 'latest_collab', 'e_commerce_platforms', 'gmv_by_channel', 'gmv_by_category', 'mcn', 'create_time', 'update_time' ] extra_kwargs = { 'avatar': {'write_only': False}, # 允许读写 'avatar_url': {'write_only': False} # 允许读写 } def get_avatar_display_url(self, obj): """获取头像显示URL,优先使用本地图片""" request = self.context.get('request') avatar_url = obj.get_avatar_url() if avatar_url and request: # 如果是本地图片,返回完整的URL if obj.avatar: return request.build_absolute_uri(avatar_url) # 如果是外部URL,直接返回 else: return avatar_url return avatar_url class CreatorProfileListSerializer(serializers.ModelSerializer): """创作者资料列表序列化器,用于列表显示,字段较少""" avatar_display_url = serializers.SerializerMethodField() class Meta: model = CreatorProfile fields = [ 'id', 'name', 'avatar_display_url', 'category', 'exposure_level', 'followers', 'gmv', 'mcn' ] def get_avatar_display_url(self, obj): """获取头像显示URL""" request = self.context.get('request') avatar_url = obj.get_avatar_url() if avatar_url and request: if obj.avatar: return request.build_absolute_uri(avatar_url) else: return avatar_url return avatar_url