Files
diary-system/backend/diary/serializers.py

62 lines
2.5 KiB
Python
Raw Normal View History

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']
2026-04-14 11:57:24 +00:00
extra_kwargs = {
'content': {'required': False},
'score': {'required': False},
'quality': {'required': False},
'efficiency': {'required': False},
'creativity': {'required': False},
'learning': {'required': False}
2026-04-14 11:57:24 +00:00
}
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 = ['id', 'progresses', 'linked_tasks', 'experiences', 'comments', 'date', 'title', 'content', 'completed_tasks', 'learned', 'problems', 'reflections', 'improvements', 'plans', 'created_at', 'updated_at']
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']