瀏覽代碼

考试记录

liu tao 3 年之前
父節點
當前提交
53cead8563
共有 4 個文件被更改,包括 40 次插入6 次删除
  1. 1 0
      apps/api/admin/exam/urls.py
  2. 19 4
      apps/api/admin/exam/views.py
  3. 11 1
      apps/examination/exam/filters.py
  4. 9 1
      apps/examination/exam/serializers.py

+ 1 - 0
apps/api/admin/exam/urls.py

@@ -9,5 +9,6 @@ urlpatterns = [
 ]
 
 router = SimpleRouter()
+router.register(r'examlog', ExamLogViewSet)
 router.register(r'', ExamViewSet)
 urlpatterns += router.urls

+ 19 - 4
apps/api/admin/exam/views.py

@@ -2,6 +2,7 @@
 
 import json
 from django.db import transaction
+from rest_framework.viewsets import ReadOnlyModelViewSet
 from rest_framework.decorators import action
 from utils.permission import IsAdministrator
 from utils import response_error, response_ok
@@ -10,9 +11,9 @@ from apps.system.models import SysLog
 
 from apps.examination.exampaper.models import ExamPaper
 from apps.examination.exampaper.serializers import ExamPaperSerializer
-from apps.examination.exam.models import Exam, ExamLog
-from apps.examination.exam.filters import ExamFilter
-from apps.examination.exam.serializers import ExamSerializer
+from apps.examination.exam.models import Exam, ExamLog, ExamAnswerLog
+from apps.examination.exam.filters import ExamFilter, FormalExamLogFilter
+from apps.examination.exam.serializers import ExamSerializer, FormalExamLogSerializer
 
 class ExamViewSet(CustomModelViewSet):
     permission_classes = [IsAdministrator, ]
@@ -100,4 +101,18 @@ class ExamViewSet(CustomModelViewSet):
                 'department_text': row['user__department__name'],
             }
             result.append(item)
-        return response_ok(result)
+        return response_ok(result)
+
+class ExamLogViewSet(ReadOnlyModelViewSet):
+    permission_classes = [IsAdministrator, ]
+    queryset = ExamLog.objects.filter(type=ExamLog.FORMAL, delete=False)
+    serializer_class = FormalExamLogSerializer
+
+    def filter_queryset(self, queryset):
+        f = FormalExamLogFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    @action(methods=['get'], detail=True)
+    def answer_log(self, request, pk):
+        rows = ExamAnswerLog.objects.filter(main_id=pk).order_by('detail__order').values_list('status', flat=True)
+        return response_ok(list(rows))

+ 11 - 1
apps/examination/exam/filters.py

@@ -1,7 +1,7 @@
 # coding=utf-8
 import django_filters
 
-from .models import Exam
+from .models import Exam, ExamLog
 
 class ExamFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name="name", lookup_expr="icontains")
@@ -10,4 +10,14 @@ class ExamFilter(django_filters.FilterSet):
 
     class Meta:
         model = Exam
+        fields = "__all__"
+
+class FormalExamLogFilter(django_filters.FilterSet):
+    exam_name = django_filters.CharFilter(field_name="exam__name", lookup_expr="icontains")
+    user_username = django_filters.CharFilter(field_name="user__username", lookup_expr="icontains")
+    exam_subject = django_filters.CharFilter(field_name='exam__subject_id')
+    exam_type = django_filters.CharFilter(field_name='exam__type')
+
+    class Meta:
+        model = ExamLog
         fields = "__all__"

+ 9 - 1
apps/examination/exam/serializers.py

@@ -35,4 +35,12 @@ class ExamSerializer(serializers.ModelSerializer):
         instance = super(ExamSerializer, self).update(instance, validated_data)
         instance.change_examtime()
         instance.save()
-        return instance
+        return instance
+
+class FormalExamLogSerializer(serializers.ModelSerializer):
+    exam_name = serializers.CharField(source='exam.name', read_only=True)
+    exam_subject_name = serializers.CharField(source='exam.subject.name', read_only=True)
+
+    class Meta:
+        model = ExamLog
+        fields = "__all__"