Files
diary-system/backend/diary/serializers.py
2026-04-14 12:18:01 +00:00

62 lines
2.3 KiB
Python
Executable File

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']
extra_kwargs = {
'content': {'required': False},
'score': {'required': False},
'quality': {'required': False},
'efficiency': {'required': False},
'creativity': {'required': False},
'learning': {'required': False}
}
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']