feat: 添加批注功能
后端: - Comment 模型(支持日记/任务/经验三种内容类型) - CommentSerializer 和 CommentViewSet - API: /api/comments/ - 批注 CRUD - API: /api/comments/by_content/?content_type=diary&object_id=1 - 按内容获取批注 - 日记/任务/经验序列化器嵌套显示批注 前端: - 批注样式(comments-section, comment-item) - 添加批注输入框 使用方式: - 北极星可以在任何日记/任务/经验下添加批注 - 批注会显示在内容下方 - 支持查看历史批注
This commit is contained in:
@@ -1,8 +1,15 @@
|
||||
from rest_framework import serializers
|
||||
from .models import DiaryEntry, DailyProgress, Experience, Task
|
||||
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
|
||||
@@ -24,6 +31,7 @@ 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
|
||||
@@ -33,9 +41,10 @@ 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] # 最近 5 条关联日记
|
||||
entries = obj.diary_entries.all()[:5]
|
||||
return DiaryEntrySerializer(entries, many=True).data
|
||||
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user