66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
"""
|
|
故事模块序列化器
|
|
"""
|
|
from rest_framework import serializers
|
|
from .models import StoryShelf, Story
|
|
|
|
|
|
class StoryShelfSerializer(serializers.ModelSerializer):
|
|
"""书架序列化器"""
|
|
story_count = serializers.IntegerField(read_only=True, default=0)
|
|
|
|
class Meta:
|
|
model = StoryShelf
|
|
fields = ['id', 'name', 'capacity', 'is_locked', 'unlock_cost', 'story_count', 'created_at']
|
|
read_only_fields = ['id', 'created_at']
|
|
|
|
|
|
class CreateShelfSerializer(serializers.Serializer):
|
|
"""创建书架序列化器"""
|
|
name = serializers.CharField(max_length=100)
|
|
|
|
|
|
class StoryListSerializer(serializers.ModelSerializer):
|
|
"""故事列表序列化器"""
|
|
|
|
class Meta:
|
|
model = Story
|
|
fields = ['id', 'title', 'cover_url', 'content', 'audio_url',
|
|
'has_video', 'video_url', 'created_at']
|
|
|
|
|
|
class StoryDetailSerializer(serializers.ModelSerializer):
|
|
"""故事详情序列化器"""
|
|
|
|
class Meta:
|
|
model = Story
|
|
fields = ['id', 'title', 'content', 'cover_url', 'audio_url',
|
|
'has_video', 'video_url', 'generation_mode', 'prompt',
|
|
'shelf', 'created_at', 'updated_at']
|
|
|
|
|
|
class CreateStorySerializer(serializers.Serializer):
|
|
"""保存故事序列化器"""
|
|
title = serializers.CharField(max_length=200)
|
|
content = serializers.CharField()
|
|
shelf_id = serializers.IntegerField()
|
|
cover_url = serializers.URLField(required=False, allow_blank=True, default='')
|
|
generation_mode = serializers.ChoiceField(
|
|
choices=['ai', 'manual'], default='ai'
|
|
)
|
|
prompt = serializers.CharField(required=False, allow_blank=True, default='')
|
|
|
|
|
|
class GenerateStorySerializer(serializers.Serializer):
|
|
"""生成故事序列化器"""
|
|
characters = serializers.ListField(
|
|
child=serializers.CharField(), default=[]
|
|
)
|
|
scenes = serializers.ListField(
|
|
child=serializers.CharField(), default=[]
|
|
)
|
|
props = serializers.ListField(
|
|
child=serializers.CharField(), default=[]
|
|
)
|
|
shelf_id = serializers.IntegerField(required=False, allow_null=True)
|