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:
maoshen
2026-04-14 11:46:52 +00:00
parent 4aeb21c2d7
commit 00a6aef16b
6 changed files with 166 additions and 5 deletions

View File

@@ -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: