from rest_framework import serializers from .models import DiaryEntry, DailyProgress, Experience, Task class ExperienceSerializer(serializers.ModelSerializer): category_display = serializers.CharField(source='get_category_display', read_only=True) class Meta: model = Experience fields = '__all__' class DailyProgressSerializer(serializers.ModelSerializer): class Meta: model = DailyProgress fields = '__all__' class TaskSimpleSerializer(serializers.ModelSerializer): status_display = serializers.CharField(source='get_status_display', read_only=True) class Meta: model = Task fields = ['id', 'title', 'status', 'status_display', 'progress_percent'] class DiaryEntrySerializer(serializers.ModelSerializer): progresses = DailyProgressSerializer(many=True, read_only=True) linked_tasks = TaskSimpleSerializer(many=True, read_only=True) experiences = ExperienceSerializer(many=True, read_only=True) class Meta: model = DiaryEntry fields = '__all__' class TaskSerializer(serializers.ModelSerializer): status_display = serializers.CharField(source='get_status_display', read_only=True) priority_display = serializers.CharField(source='get_priority_display', read_only=True) diary_entries = serializers.SerializerMethodField() def get_diary_entries(self, obj): entries = obj.diary_entries.all()[:5] # 最近 5 条关联日记 return DiaryEntrySerializer(entries, many=True).data class Meta: model = Task fields = '__all__' read_only_fields = ['completed_at', 'created_at', 'updated_at']