daren/apps/expertproducts/serializers.py
2025-05-19 18:23:59 +08:00

175 lines
7.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework import serializers
# from user_management.models import OperatorAccount, PlatformAccount, Video, KnowledgeBase, KnowledgeBaseDocument
import uuid
from django.db.models import Q
from .models import Product, Creator, Negotiation, Message
#
# class OperatorAccountSerializer(serializers.ModelSerializer):
# 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
#
#
# class PlatformAccountSerializer(serializers.ModelSerializer):
# 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()
#
#
# class MultiPlatformAccountSerializer(serializers.Serializer):
# """多平台账号创建序列化器"""
# 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 CreatorSerializer(serializers.ModelSerializer):
class Meta:
model = Creator
fields = '__all__'
class NegotiationSerializer(serializers.ModelSerializer):
class Meta:
model = Negotiation
fields = '__all__'
read_only_fields = ('status', 'current_round')
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
fields = '__all__'