from rest_framework import serializers from .models import DiaryEntry, DailyProgress, Experience, Task, Comment class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = '__all__' read_only_fields = ['created_at'] class ExperienceSerializer(serializers.ModelSerializer): category_display = serializers.CharField(source='get_category_display', read_only=True) comments = CommentSerializer(many=True, read_only=True, source='comment_set') 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) comments = CommentSerializer(many=True, read_only=True, source='comment_set') 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() comments = CommentSerializer(many=True, read_only=True, source='comment_set') def get_diary_entries(self, obj): entries = obj.diary_entries.all()[:5] return DiaryEntrySerializer(entries, many=True).data class Meta: model = Task fields = '__all__' read_only_fields = ['completed_at', 'created_at', 'updated_at']