feat: update personal stats and cms change reuqest method

This commit is contained in:
2026-06-12 11:11:48 +08:00
parent f2dcf3d490
commit 2fab2be0a1
12 changed files with 546 additions and 43 deletions
+15 -5
View File
@@ -78,7 +78,8 @@ class CmsTeacherStudentRelationViewSet(viewsets.ModelViewSet):
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
filterset_fields = ['teacher', 'student', 'status']
search_fields = ['teacher__real_name', 'teacher__phone', 'student__real_name', 'student__phone']
http_method_names = ['get', 'post', 'patch', 'delete', 'head', 'options']
# 仅 GET / POST:查=GET,增删改=POST(编辑→{id}/update/,停用→{id}/disable/
http_method_names = ['get', 'post', 'head', 'options']
def get_queryset(self):
qs = TeacherStudentRelation.objects.select_related('teacher', 'student').all().order_by('-created_at')
@@ -88,7 +89,7 @@ class CmsTeacherStudentRelationViewSet(viewsets.ModelViewSet):
return qs.filter(teacher__institution_id=user.institution_id)
def get_serializer_class(self):
if self.action in ('create', 'update', 'partial_update'):
if self.action in ('create', 'update_relation'):
return CmsRelationWriteSerializer
return CmsRelationSerializer
@@ -98,14 +99,23 @@ class CmsTeacherStudentRelationViewSet(viewsets.ModelViewSet):
rel = write.save()
return Response(CmsRelationSerializer(rel).data, status=status.HTTP_201_CREATED)
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
@extend_schema(summary='CMS-REL-3 编辑师生关系', tags=['CMS-师生关系'])
@action(detail=True, methods=['post'], url_path='update')
def update_relation(self, request, pk=None):
"""编辑师生关系(POST 局部更新,等价旧 PATCH /{id}/)。"""
instance = self.get_object()
write = self.get_serializer(instance, data=request.data, partial=partial)
write = self.get_serializer(instance, data=request.data, partial=True)
write.is_valid(raise_exception=True)
rel = write.save()
return Response(CmsRelationSerializer(rel).data)
@extend_schema(summary='CMS-REL-4 停用师生关系(逻辑删除)', tags=['CMS-师生关系'])
@action(detail=True, methods=['post'], url_path='disable')
def disable(self, request, pk=None):
"""停用师生关系(软删除,等价旧 DELETE /{id}/)。"""
self.get_object().delete()
return Response({'message': '已停用'})
@extend_schema(summary='CMS-REL-4 下载师生关系导入模板', tags=['CMS-师生关系'])
@action(detail=False, methods=['get'], url_path='import-template')
def import_template(self, request):