diff --git a/server/apps/exam/views.py b/server/apps/exam/views.py index ca67fe8..b80ef21 100644 --- a/server/apps/exam/views.py +++ b/server/apps/exam/views.py @@ -1,5 +1,6 @@ from django.shortcuts import render -from rest_framework.viewsets import ModelViewSet +from rest_framework.viewsets import ModelViewSet, GenericViewSet +from rest_framework.mixins import ListModelMixin, DestroyModelMixin from apps.exam.exports import export_question from apps.exam.models import Question, Questioncat, PaperQuestion from apps.exam.serializers import (QuestionSerializer, QuestioncatSerializer, PaperSerializer, ExamDetailSerializer, ExamRecordDetailSerializer, ExamListSerializer, @@ -17,6 +18,7 @@ from rest_framework.serializers import Serializer from datetime import datetime from apps.exam.filters import ExamRecordFilter, ExamFilter from datetime import timedelta +from apps.system.mixins import CreateUpdateCustomMixin # Create your views here. @@ -43,7 +45,7 @@ def dectry(p): return dec_str -class QuestioncatViewSet(ModelViewSet): +class QuestioncatViewSet(CreateUpdateCustomMixin, ModelViewSet): perms_map = {'get': '*', 'post':'question', 'put':'question', 'delete':'question'} queryset = Questioncat.objects.all() serializer_class = QuestioncatSerializer @@ -51,7 +53,7 @@ class QuestioncatViewSet(ModelViewSet): search_fields = ['name'] -class QuestionViewSet(ModelViewSet): +class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet): perms_map = {'get': '*', 'post':'question', 'put':'question', 'delete':'question'} queryset = Question.objects.all() serializer_class = QuestionSerializer @@ -233,6 +235,7 @@ class PaperViewSet(ModelViewSet): sr = PaperCreateUpdateSerializer(data=request.data) sr.is_valid(raise_exception=True) vdata = sr.validated_data + vdata['create_by'] = request.user questions_ = vdata.pop('questions_') paper = Paper.objects.create(**vdata) q_list = [] @@ -251,6 +254,7 @@ class PaperViewSet(ModelViewSet): sr.is_valid(raise_exception=True) vdata = sr.validated_data questions_ = vdata.pop('questions_') + vdata['update_by'] = request.user Paper.objects.filter(id=paper.id).update(**vdata) q_list = [] for i in questions_: @@ -260,7 +264,7 @@ class PaperViewSet(ModelViewSet): return Response() -class ExamViewSet(ModelViewSet): +class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet): perms_map = {'get': '*', 'post':'exam', 'put':'exam', 'delete':'exam'} queryset = Exam.objects.all().select_related('paper', 'create_by') ordering = ['-id'] @@ -322,7 +326,7 @@ class ExamViewSet(ModelViewSet): raise ParseError('暂不支持') -class ExamRecordViewSet(ModelViewSet): +class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): """ 考试记录列表和详情 """ @@ -342,7 +346,7 @@ class ExamRecordViewSet(ModelViewSet): def perform_destroy(self, instance): # 考试记录物理删除 instance.delete(soft=False) - @action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=Serializer, permission_classes = [IsAuthenticated]) + @action(methods=['post'], detail=False, perms_map=[{'post': '*'}], serializer_class=Serializer, permission_classes = [IsAuthenticated]) def clear(self, request, pk=None): """ 清除七日前未提交的考试记录 @@ -357,6 +361,8 @@ class ExamRecordViewSet(ModelViewSet): @action(methods=['get'], detail=False, permission_classes=[IsAuthenticated]) def self(self, request, pk=None): ''' + 个人考试记录 + 个人考试记录 ''' queryset = ExamRecord.objects.filter(create_by=request.user).order_by('-update_time')