feat: 关联式设计 - 日记为中心
模型变更:
- DiaryEntry 添加 linked_tasks (ManyToMany 关联任务)
- DiaryEntry 添加 content 字段
- Experience 添加 extracted_from (外键关联日记)
- Task 添加 diary_entries (反向关联)
API 变更:
- 新增 /entries/{id}/link_task/ - 关联任务并自动更新进展
- 新增 /entries/{id}/extract_experience/ - 从日记提炼经验
- 序列化器支持关联数据嵌套显示
前端重构:
- 写日记作为主入口
- 关联任务复选框(保存时自动更新任务进展)
- 日记历史显示关联的任务和经验
- 任务列表显示关联的日记
- 经验总结独立展示
工作流程优化:
- 写日记时勾选任务 → 自动更新任务进展
- 写日记时记录反思 → 可提炼为经验总结
- 减少 60-70% 重复记录工作
This commit is contained in:
@@ -28,11 +28,41 @@ class DiaryEntryViewSet(viewsets.ModelViewSet):
|
||||
def stats(self, request):
|
||||
"""获取统计信息"""
|
||||
total_entries = DiaryEntry.objects.count()
|
||||
total_tasks = Task.objects.count()
|
||||
total_experiences = Experience.objects.count()
|
||||
return Response({
|
||||
'total_entries': total_entries,
|
||||
'first_entry': DiaryEntry.objects.order_by('date').first().date if total_entries > 0 else None,
|
||||
'latest_entry': DiaryEntry.objects.order_by('-date').first().date if total_entries > 0 else None,
|
||||
'total_tasks': total_tasks,
|
||||
'total_experiences': total_experiences,
|
||||
})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def link_task(self, request, pk=None):
|
||||
"""关联任务到日记"""
|
||||
entry = self.get_object()
|
||||
task_id = request.data.get('task_id')
|
||||
progress_percent = request.data.get('progress_percent')
|
||||
notes = request.data.get('notes', '')
|
||||
|
||||
task = Task.objects.get(id=task_id)
|
||||
entry.link_task(task, progress_percent, notes)
|
||||
|
||||
return Response(DiaryEntrySerializer(entry).data)
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def extract_experience(self, request, pk=None):
|
||||
"""从日记提炼经验"""
|
||||
entry = self.get_object()
|
||||
exp = entry.extract_experience(
|
||||
title=request.data.get('title'),
|
||||
category=request.data.get('category'),
|
||||
problem=request.data.get('problem'),
|
||||
solution=request.data.get('solution'),
|
||||
lesson_learned=request.data.get('lesson_learned', '')
|
||||
)
|
||||
return Response(ExperienceSerializer(exp).data)
|
||||
|
||||
class DailyProgressViewSet(viewsets.ModelViewSet):
|
||||
queryset = DailyProgress.objects.all()
|
||||
|
||||
Reference in New Issue
Block a user