daren/apps/expertproducts/serializers.py

175 lines
8.2 KiB
Python
Raw Normal View History

2025-05-19 18:23:59 +08:00
from rest_framework import serializers
# from user_management.models import OperatorAccount, PlatformAccount, Video, KnowledgeBase, KnowledgeBaseDocument
import uuid
from django.db.models import Q
2025-05-20 12:40:54 +08:00
from apps.daren_detail.models import CreatorProfile
from apps.brands.models import Product
from .models import Negotiation, Message
2025-05-19 18:23:59 +08:00
#
2025-05-29 10:08:06 +08:00
# class Operatorusererializer(serializers.ModelSerializer):
2025-05-19 18:23:59 +08:00
# id = serializers.UUIDField(read_only=False, required=False) # 允许前端不提供ID但如果提供则必须是有效的UUID
#
# class Meta:
# model = OperatorAccount
# fields = ['id', 'username', 'password', 'real_name', 'email', 'phone', 'position', 'department', 'is_active',
# 'created_at', 'updated_at']
# read_only_fields = ['created_at', 'updated_at']
# extra_kwargs = {
# 'password': {'write_only': True}
# }
#
# def create(self, validated_data):
# # 如果没有提供ID则生成一个UUID
# if 'id' not in validated_data:
# validated_data['id'] = uuid.uuid4()
#
# password = validated_data.pop('password', None)
# instance = self.Meta.model(**validated_data)
# if password:
# instance.password = password # 在实际应用中应该加密存储密码
# instance.save()
# return instance
#
#
2025-05-29 10:08:06 +08:00
# class Platformusererializer(serializers.ModelSerializer):
2025-05-19 18:23:59 +08:00
# operator_name = serializers.CharField(source='operator.real_name', read_only=True)
#
# class Meta:
# model = PlatformAccount
# fields = ['id', 'operator', 'operator_name', 'platform_name', 'account_name', 'account_id',
# 'status', 'followers_count', 'account_url', 'description',
# 'tags', 'profile_image', 'last_posting',
# 'created_at', 'updated_at', 'last_login']
# read_only_fields = ['id', 'created_at', 'updated_at']
#
# def to_internal_value(self, data):
# # 处理operator字段可能是字符串格式的UUID
# if 'operator' in data and isinstance(data['operator'], str):
# try:
# # 尝试获取对应的运营账号对象
# operator = OperatorAccount.objects.get(id=data['operator'])
# data['operator'] = operator.id # 确保使用正确的ID格式
# except OperatorAccount.DoesNotExist:
# # 如果找不到对应的运营账号,保持原值,让验证器捕获此错误
# pass
# except Exception as e:
# # 其他类型的错误如ID格式不正确等
# pass
#
# return super().to_internal_value(data)
#
#
# class PlatformDetailSerializer(serializers.Serializer):
# """平台详情序列化器,用于多平台账号创建"""
# platform_name = serializers.ChoiceField(choices=PlatformAccount.PLATFORM_CHOICES)
# platform_url = serializers.URLField()
#
#
2025-05-29 10:08:06 +08:00
# class MultiPlatformusererializer(serializers.Serializer):
2025-05-19 18:23:59 +08:00
# """多平台账号创建序列化器"""
# operator = serializers.PrimaryKeyRelatedField(queryset=OperatorAccount.objects.all())
# account_name = serializers.CharField(max_length=100)
# account_id = serializers.CharField(max_length=100)
# status = serializers.ChoiceField(choices=PlatformAccount.STATUS_CHOICES, default='active')
# followers_count = serializers.IntegerField(default=0)
# description = serializers.CharField(required=False, allow_blank=True, allow_null=True)
# tags = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=255)
# profile_image = serializers.URLField(required=False, allow_blank=True, allow_null=True)
# last_posting = serializers.DateTimeField(required=False, allow_null=True)
# platforms = PlatformDetailSerializer(many=True)
#
# def to_internal_value(self, data):
# # 处理operator字段可能是字符串类型的ID
# if 'operator' in data and isinstance(data['operator'], str):
# try:
# # 尝试通过ID查找运营账号
# operator_id = data['operator']
# try:
# # 先尝试通过整数ID查找
# operator_id_int = int(operator_id)
# operator = OperatorAccount.objects.get(id=operator_id_int)
# data['operator'] = operator.id
# except (ValueError, OperatorAccount.DoesNotExist):
# # 如果无法转换为整数或找不到对应账号,尝试通过用户名或真实姓名查找
# operator = OperatorAccount.objects.filter(
# Q(username=operator_id) | Q(real_name=operator_id)
# ).first()
#
# if operator:
# data['operator'] = operator.id
# except Exception as e:
# pass
#
# return super().to_internal_value(data)
#
#
# class VideoSerializer(serializers.ModelSerializer):
# platform_account_name = serializers.CharField(source='platform_account.account_name', read_only=True)
# platform_name = serializers.CharField(source='platform_account.platform_name', read_only=True)
#
# class Meta:
# model = Video
# fields = ['id', 'platform_account', 'platform_account_name', 'platform_name', 'title',
# 'description', 'video_url', 'local_path', 'thumbnail_url', 'status',
# 'views_count', 'likes_count', 'comments_count', 'shares_count', 'tags',
# 'publish_time', 'scheduled_time', 'created_at', 'updated_at']
# read_only_fields = ['id', 'created_at', 'updated_at', 'views_count', 'likes_count',
# 'comments_count', 'shares_count']
#
# def to_internal_value(self, data):
# # 处理platform_account字段可能是字符串格式的UUID
# if 'platform_account' in data and isinstance(data['platform_account'], str):
# try:
# # 尝试获取对应的平台账号对象
# platform_account = PlatformAccount.objects.get(id=data['platform_account'])
# data['platform_account'] = platform_account.id # 确保使用正确的ID格式
# except PlatformAccount.DoesNotExist:
# # 如果找不到对应的平台账号,保持原值,让验证器捕获此错误
# pass
# except Exception as e:
# # 其他类型的错误如ID格式不正确等
# pass
#
# return super().to_internal_value(data)
#
#
# class KnowledgeBaseSerializer(serializers.ModelSerializer):
# class Meta:
# model = KnowledgeBase
# fields = ['id', 'user_id', 'name', 'desc', 'type', 'department', 'group',
# 'external_id', 'create_time', 'update_time']
# read_only_fields = ['id', 'create_time', 'update_time']
#
#
# class KnowledgeBaseDocumentSerializer(serializers.ModelSerializer):
# class Meta:
# model = KnowledgeBaseDocument
# fields = ['id', 'knowledge_base', 'document_id', 'document_name',
# 'external_id', 'uploader_name', 'status', 'create_time', 'update_time']
# read_only_fields = ['id', 'create_time', 'update_time']
#
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class NegotiationSerializer(serializers.ModelSerializer):
2025-05-20 12:40:54 +08:00
creator_name = serializers.CharField(source='creator.name', read_only=True)
creator_avatar = serializers.CharField(source='creator.avatar_url', read_only=True)
product_name = serializers.CharField(source='product.name', read_only=True)
product_category = serializers.CharField(source='product.category', read_only=True)
2025-05-19 18:23:59 +08:00
class Meta:
model = Negotiation
2025-05-20 12:40:54 +08:00
fields = ['id', 'creator', 'creator_name', 'creator_avatar', 'product', 'product_name', 'product_category', 'status', 'current_round', 'context']
2025-05-19 18:23:59 +08:00
read_only_fields = ('status', 'current_round')
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
fields = '__all__'