소스 검색

模拟考试,试题列表

wushaodong 3 년 전
부모
커밋
0f33064e9e

+ 14 - 0
apps/api/staff/mock/urls.py

@@ -0,0 +1,14 @@
+# coding=utf-8
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+    url(r'^dict/$', DictView.as_view()),
+]
+
+router = SimpleRouter()
+router.register(r'exam_paper', ExamPaperViewSet)
+# router.register(r'exam', ExamLogViewSet)
+urlpatterns += router.urls

+ 46 - 0
apps/api/staff/mock/views.py

@@ -0,0 +1,46 @@
+# coding=utf-8
+import json
+import traceback
+from django.db.models import Sum, F
+from rest_framework.decorators import action
+from rest_framework.serializers import ValidationError
+from rest_framework.views import APIView
+from django.db import transaction
+from django.db.models import Q
+from utils.custom_modelviewset import CustomModelViewSet
+from utils import response_ok, response_error
+from utils.permission import IsAdministrator, IsStaff
+from apps.examination.exam.serializers import *
+from apps.examination.exam.filters import *
+from apps.system.models import SysLog
+from apps.foundation.serializers import SubjectSerializer, ChapterSerializer, SubjectSimpleSerializer, \
+    ChapterSimpleSerializer, Subject
+from apps.examination.exampaper.filters import ExamPaper, ExamPaperFilter
+from apps.examination.exampaper.serializers import StaffExamPaperSerializer
+
+class ExamPaperViewSet(CustomModelViewSet):
+    permission_classes = [IsStaff, ]
+    queryset = ExamPaper.objects.filter(delete=False)
+    serializer_class = StaffExamPaperSerializer
+
+    def filter_queryset(self, queryset):
+        f = ExamPaperFilter(self.request.GET, queryset=queryset, request=self.request)
+        return f.qs
+
+class ExamLogViewSet(CustomModelViewSet):
+    permission_classes = [IsStaff, ]
+    queryset = ExamLog.objects.filter(delete=False)
+    serializer_class = StaffExamLogSerializer
+
+    def filter_queryset(self, queryset):
+        # queryset = queryset.filter(user=self.request.user)
+        f = FormalExamLogFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+class DictView(APIView):
+    permission_classes = [IsStaff, ]
+
+    def get(self, request):
+        subjects = Subject.objects.filter(delete=False)
+        serializers = SubjectSerializer(subjects, many=True)
+        return response_ok(serializers.data)

+ 1 - 1
apps/api/staff/practise/views.py

@@ -255,7 +255,7 @@ class PractiseLogViewSet(CustomModelViewSet):
 
     @action(methods=['post'], detail=True)
     def submit_practise(self, request, pk):
-        # 习题交卷
+        # 习题交卷,把上个接口的判断答案,放到此处
         try:
             instance = self.get_object()
 

+ 1 - 0
apps/api/staff/urls.py

@@ -11,4 +11,5 @@ urlpatterns = [
     url(r'^token_verify/$', StaffUserVerifyTokenView.as_view()),
 
     url(r'^practise/', include('apps.api.staff.practise.urls')),
+    url(r'^mock/', include('apps.api.staff.mock.urls')),
 ]

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

@@ -7,7 +7,17 @@ class ExamPaperFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name="name", lookup_expr="icontains")
     subject = django_filters.CharFilter(field_name='subject_id')
     type = django_filters.CharFilter(field_name='type')
+    status = django_filters.CharFilter(method='status_filter')
+
+    def status_filter(self, queryset, name,value):
+        from apps.examination.exam.models import ExamLog
+        exampaper_ids = ExamLog.objects.filter(user=self.request.user, delete=False).values_list('exampaper_id', flat=True)
+        if value == '1':
+            queryset = queryset.filter(id__in=exampaper_ids)
+        elif value == '2':
+            queryset = queryset.exclude(id__in=exampaper_ids)
+        return queryset
 
     class Meta:
         model = ExamPaper
-        fields = "__all__"
+        fields = "__all__"

+ 16 - 1
apps/examination/exampaper/serializers.py

@@ -80,4 +80,19 @@ class ExamPaperSerializer(serializers.ModelSerializer):
             instance.clear_detail()
             instance.generate_detail()
 
-        return instance
+        return instance
+
+class StaffExamPaperSerializer(serializers.ModelSerializer):
+    subject_name = serializers.CharField(source='subject.name', read_only=True)
+    status_text = serializers.SerializerMethodField()
+
+    def get_status_text(self, obj):
+        from apps.examination.exam.models import ExamLog
+        exampaper = ExamLog.objects.filter(user=self.context['request'].user,exampaper=obj)
+        if exampaper:
+            return '做过'
+        return ''
+
+    class Meta:
+        model = ExamPaper
+        fields = ('id', 'name','subject_name','status_text','did_count','question_total_count', )