from rest_framework import serializers from .models import ChatMessage, CredentialSlot class ChatMessageSerializer(serializers.ModelSerializer): class Meta: model = ChatMessage fields = ['id', 'user', 'bot', 'message', 'timestamp', 'sender', 'message_type', 'message_audio_url', 'message_video_url'] read_only_fields = ['id', 'timestamp', 'sender'] class CredentialSlotSerializer(serializers.ModelSerializer): """通用凭据槽位序列化器(明文存储,脱敏由 view 层完成)。 设计动机(per CONTEXT.md D-Serializer): - 脱敏放 view 层不放 serializer:PUT 路径需要明文走 is_valid + save,serializer 不应承担"既要明文又要脱敏"的双重责任。 - app_id / access_token 在模型层 blank=True, default='',对应 serializer 配 allow_blank=True, allow_null=False, required=False;既允许空字符串覆写、又 拒绝 None;缺字段时由 ModelSerializer 默认行为(用现有值兜底)。 - updated_at 由模型层 auto_now=True 自动维护,read_only 双重保险。 """ class Meta: model = CredentialSlot fields = ['app_id', 'access_token', 'updated_at'] read_only_fields = ['updated_at'] extra_kwargs = { 'app_id': {'allow_blank': True, 'allow_null': False, 'required': False}, 'access_token': {'allow_blank': True, 'allow_null': False, 'required': False}, }