瀏覽代碼

Merge remote-tracking branch 'origin/master'

wushaodong 3 年之前
父節點
當前提交
fcf1225883

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

@@ -5,7 +5,7 @@ from rest_framework.routers import SimpleRouter
 from .views import *
 
 urlpatterns = [
-
+    url(r'^dict/$', DictView.as_view()),
 ]
 
 router = SimpleRouter()

+ 14 - 0
apps/api/staff/errorbook/views.py

@@ -1,11 +1,15 @@
 # coding=utf-8
 
 from rest_framework.viewsets import ReadOnlyModelViewSet
+from rest_framework.views import APIView
 from utils import response_ok, response_error
 from apps.system.models import SysLog
 from utils.permission import IsAdministrator, IsStaff
+from apps.practise.errorbook.models import ErrorBook
 from apps.practise.errorbook.filters import *
 from apps.practise.errorbook.serializers import *
+from apps.foundation.models import Subject, Chapter
+from apps.foundation.serializers import SubjectSimpleSerializer, ChapterSimpleSerializer
 
 
 class ErrorBookViewSet(ReadOnlyModelViewSet):
@@ -18,3 +22,13 @@ class ErrorBookViewSet(ReadOnlyModelViewSet):
         queryset = queryset.filter(create_user=self.request.user)
         f = ErrorBookFilter(self.request.GET, queryset=queryset)
         return f.qs
+
+
+class DictView(APIView):
+    permission_classes = [IsStaff, ]
+
+    def get(self, request):
+        ret = {
+            'subject': SubjectSimpleSerializer(Subject.objects.filter(delete=False), many=True).data
+        }
+        return response_ok(ret)

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

@@ -10,4 +10,5 @@ urlpatterns = [
 
 router = SimpleRouter()
 router.register(r'exam_log', ExamLogViewSet)
+router.register(r'feedback', ExamQuestionFeedbackViewSet)
 urlpatterns += router.urls

+ 14 - 1
apps/api/staff/exam/views.py

@@ -19,7 +19,8 @@ from apps.examination.exam.models import ExamAnswerLog, ExamAnswerOptionLog, Exa
 from apps.examination.exampaper.models import ExamPaper, ExamPaperDetail, ExamQuestion
 from apps.examination.exampaper.filters import ExamPaperFilter
 from apps.examination.exampaper.serializers import StaffExamPaperSerializer
-from apps.examination.examquestion.models import ExamQuestionOption, ExamQuestionFill
+from apps.examination.examquestion.models import ExamQuestionOption, ExamQuestionFill, ExamQuestionFeedback
+from apps.examination.examquestion.serializers import ExamQuestionFeedbackSerializer
 from apps.practise.errorbook.models import ErrorBook
 
 class ExamLogViewSet(CustomModelViewSet):
@@ -323,3 +324,15 @@ class ExamLogViewSet(CustomModelViewSet):
             traceback.print_exc()
             return response_error(str(e))
         return response_ok()
+
+
+class ExamQuestionFeedbackViewSet(CustomModelViewSet):
+    permission_classes = [IsStaff, ]
+    queryset = ExamQuestionFeedback.objects.filter()
+    serializer_class = ExamQuestionFeedbackSerializer
+
+    def perform_create(self, serializer):
+        super(ExamQuestionFeedbackViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加试题错误反馈,id=%d' % instance.id, validated_data)

+ 14 - 0
apps/api/staff/knowledge/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 = [
+
+]
+
+router = SimpleRouter()
+router.register(r'feedback', KnowledgeBaseFeedbackViewSet)
+router.register(r'', KnowledgeViewSet)
+urlpatterns += router.urls

+ 33 - 0
apps/api/staff/knowledge/views.py

@@ -0,0 +1,33 @@
+# coding=utf-8
+
+from rest_framework.viewsets import ReadOnlyModelViewSet
+from rest_framework.views import APIView
+from utils import response_ok, response_error
+from apps.system.models import SysLog
+from utils.permission import IsAdministrator, IsStaff
+from utils.custom_modelviewset import CustomModelViewSet
+from apps.knowledge.models import KnowledgeBase, KnowledgeBaseFeedback
+from apps.knowledge.filters import KnowledgeBaseFilter
+from apps.knowledge.serializers import KnowledgeBaseSerializer, KnowledgeBaseFeedbackSerializer
+
+
+class KnowledgeViewSet(ReadOnlyModelViewSet):
+    permission_classes = [IsStaff, ]
+    queryset = KnowledgeBase.objects.filter(delete=False)
+    serializer_class = KnowledgeBaseSerializer
+
+    def filter_queryset(self, queryset):
+        f = KnowledgeBaseFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+
+class KnowledgeBaseFeedbackViewSet(CustomModelViewSet):
+    permission_classes = [IsStaff, ]
+    queryset = KnowledgeBaseFeedback.objects.filter()
+    serializer_class = KnowledgeBaseFeedbackSerializer
+
+    def perform_create(self, serializer):
+        super(KnowledgeBaseFeedbackViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加知识错误反馈,id=%d' % instance.id, validated_data)

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

@@ -14,4 +14,5 @@ urlpatterns = [
     url(r'^mock/', include('apps.api.staff.mock.urls')),
     url(r'^errorbook/', include('apps.api.staff.errorbook.urls')),
     url(r'^exam/', include('apps.api.staff.exam.urls')),
+    url(r'^knowledge/', include('apps.api.staff.knowledge.urls')),
 ]

+ 12 - 10
apps/examination/exam/serializers.py

@@ -140,31 +140,33 @@ class StaffExamLogRetrieveSerializer(serializers.ModelSerializer):
         return data
 
 
-class ExamAnswerLogSerializer(serializers.ModelSerializer):
+class ExamAnswerLogSimpleSerializer(serializers.ModelSerializer):
     item = serializers.SerializerMethodField()
 
     class Meta:
         model = ExamAnswerLog
-        fields = '__all__'
+        fields = ('item', )
 
     def get_item(self, obj):
         if obj.detail.question.type <= ExamQuestion.MULTIPLE:
-            rows = ExamAnswerOptionLog.objects.filter(main=ExamAnswerLog)
-            return ExamAnswerOptionLogSerializer(rows, many=True).data
+            rows = ExamAnswerOptionLog.objects.filter(main=obj)
+            return ExamAnswerOptionLogSimpleSerializer(rows, many=True).data
         elif obj.detail.question.type == ExamQuestion.FILL:
-            rows = ExamAnswerFillLog.objects.filter(main=ExamAnswerLog)
-            return ExamAnswerFillLogSerializer(rows, many=True).data
+            rows = ExamAnswerFillLog.objects.filter(main=obj)
+            return ExamAnswerFillLogSimpleSerializer(rows, many=True).data
         else:
             return []
 
 
-class ExamAnswerOptionLogSerializer(serializers.ModelSerializer):
+class ExamAnswerOptionLogSimpleSerializer(serializers.ModelSerializer):
+
     class Meta:
         model = ExamAnswerOptionLog
-        fields = '__all__'
+        fields = ('option', )
+
 
+class ExamAnswerFillLogSimpleSerializer(serializers.ModelSerializer):
 
-class ExamAnswerFillLogSerializer(serializers.ModelSerializer):
     class Meta:
         model = ExamAnswerFillLog
-        fields = '__all__'
+        fields = ('content', 'order', )

+ 44 - 1
apps/examination/examquestion/serializers.py

@@ -118,4 +118,47 @@ class ExamQuestionFeedbackSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = ExamQuestionFeedback
-        fields = "__all__"
+        fields = "__all__"
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(ExamQuestionFeedbackSerializer, self).create(validated_data)
+        return instance
+
+
+class ExamQuestionSimpleSerializer(serializers.ModelSerializer):
+    judgment = serializers.SerializerMethodField()
+    items = serializers.SerializerMethodField()
+
+    def get_items(self, obj):
+        if obj.type <= ExamQuestion.MULTIPLE:
+            rows = ExamQuestionOption.objects.filter(main=obj, delete=False)
+            return ExamQuestionOptionSimpleSerializer(rows, many=True).data
+        elif obj.type == ExamQuestion.FILL:
+            rows = ExamQuestionFill.objects.filter(main=obj, delete=False)
+            return ExamQuestionFillSimpleSerializer(rows, many=True).data
+        else:
+            return []
+
+    def get_judgment(self, obj):
+        if obj.judgment:
+            return "1"
+        return "0"
+
+    class Meta:
+        model = ExamQuestion
+        fields = ('title', 'judgment', 'items', 'type', 'analysis', )
+
+
+class ExamQuestionOptionSimpleSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = ExamQuestionOption
+        fields = ('content', 'right', 'id', )
+
+
+class ExamQuestionFillSimpleSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = ExamQuestionFill
+        fields = ('content', 'order', )

+ 6 - 1
apps/knowledge/serializers.py

@@ -35,4 +35,9 @@ class KnowledgeBaseFeedbackSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = KnowledgeBaseFeedback
-        fields = "__all__"
+        fields = "__all__"
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(KnowledgeBaseFeedbackSerializer, self).create(validated_data)
+        return instance

+ 6 - 6
apps/practise/errorbook/serializers.py

@@ -2,21 +2,21 @@
 
 from rest_framework import serializers
 from .models import ErrorBook
-from apps.examination.examquestion.serializers import ExamQuestionSerializer
-from apps.examination.exam.serializers import ExamAnswerLogSerializer
+from apps.examination.examquestion.serializers import ExamQuestionSimpleSerializer
+from apps.examination.exam.serializers import ExamAnswerLogSimpleSerializer
 
 
 class ErrorBookSerializer(serializers.ModelSerializer):
     question = serializers.SerializerMethodField()
     answer = serializers.SerializerMethodField()
-    exam_name = serializers.CharField(source='last_answer_log.main.exam.name', read_only=True)
+    exam_name = serializers.CharField(source='last_answer_log.main.exampaper.name', read_only=True)
 
     class Meta:
         model = ErrorBook
-        fields = "__all__"
+        fields = ('last_time', 'wrong_count', 'exam_name', 'question', 'answer', )
 
     def get_question(self, obj):
-        return ExamQuestionSerializer(obj.question).data
+        return ExamQuestionSimpleSerializer(obj.question).data
 
     def get_answer(self, obj):
-        return ExamAnswerLogSerializer(obj.last_answer_log).data
+        return ExamAnswerLogSimpleSerializer(obj.last_answer_log).data