浏览代码

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 *
 from .views import *
 
 
 urlpatterns = [
 urlpatterns = [
-
+    url(r'^dict/$', DictView.as_view()),
 ]
 ]
 
 
 router = SimpleRouter()
 router = SimpleRouter()

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

@@ -1,11 +1,15 @@
 # coding=utf-8
 # coding=utf-8
 
 
 from rest_framework.viewsets import ReadOnlyModelViewSet
 from rest_framework.viewsets import ReadOnlyModelViewSet
+from rest_framework.views import APIView
 from utils import response_ok, response_error
 from utils import response_ok, response_error
 from apps.system.models import SysLog
 from apps.system.models import SysLog
 from utils.permission import IsAdministrator, IsStaff
 from utils.permission import IsAdministrator, IsStaff
+from apps.practise.errorbook.models import ErrorBook
 from apps.practise.errorbook.filters import *
 from apps.practise.errorbook.filters import *
 from apps.practise.errorbook.serializers import *
 from apps.practise.errorbook.serializers import *
+from apps.foundation.models import Subject, Chapter
+from apps.foundation.serializers import SubjectSimpleSerializer, ChapterSimpleSerializer
 
 
 
 
 class ErrorBookViewSet(ReadOnlyModelViewSet):
 class ErrorBookViewSet(ReadOnlyModelViewSet):
@@ -18,3 +22,13 @@ class ErrorBookViewSet(ReadOnlyModelViewSet):
         queryset = queryset.filter(create_user=self.request.user)
         queryset = queryset.filter(create_user=self.request.user)
         f = ErrorBookFilter(self.request.GET, queryset=queryset)
         f = ErrorBookFilter(self.request.GET, queryset=queryset)
         return f.qs
         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 = SimpleRouter()
 router.register(r'exam_log', ExamLogViewSet)
 router.register(r'exam_log', ExamLogViewSet)
+router.register(r'feedback', ExamQuestionFeedbackViewSet)
 urlpatterns += router.urls
 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.models import ExamPaper, ExamPaperDetail, ExamQuestion
 from apps.examination.exampaper.filters import ExamPaperFilter
 from apps.examination.exampaper.filters import ExamPaperFilter
 from apps.examination.exampaper.serializers import StaffExamPaperSerializer
 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
 from apps.practise.errorbook.models import ErrorBook
 
 
 class ExamLogViewSet(CustomModelViewSet):
 class ExamLogViewSet(CustomModelViewSet):
@@ -323,3 +324,15 @@ class ExamLogViewSet(CustomModelViewSet):
             traceback.print_exc()
             traceback.print_exc()
             return response_error(str(e))
             return response_error(str(e))
         return response_ok()
         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'^mock/', include('apps.api.staff.mock.urls')),
     url(r'^errorbook/', include('apps.api.staff.errorbook.urls')),
     url(r'^errorbook/', include('apps.api.staff.errorbook.urls')),
     url(r'^exam/', include('apps.api.staff.exam.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
         return data
 
 
 
 
-class ExamAnswerLogSerializer(serializers.ModelSerializer):
+class ExamAnswerLogSimpleSerializer(serializers.ModelSerializer):
     item = serializers.SerializerMethodField()
     item = serializers.SerializerMethodField()
 
 
     class Meta:
     class Meta:
         model = ExamAnswerLog
         model = ExamAnswerLog
-        fields = '__all__'
+        fields = ('item', )
 
 
     def get_item(self, obj):
     def get_item(self, obj):
         if obj.detail.question.type <= ExamQuestion.MULTIPLE:
         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:
         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:
         else:
             return []
             return []
 
 
 
 
-class ExamAnswerOptionLogSerializer(serializers.ModelSerializer):
+class ExamAnswerOptionLogSimpleSerializer(serializers.ModelSerializer):
+
     class Meta:
     class Meta:
         model = ExamAnswerOptionLog
         model = ExamAnswerOptionLog
-        fields = '__all__'
+        fields = ('option', )
+
 
 
+class ExamAnswerFillLogSimpleSerializer(serializers.ModelSerializer):
 
 
-class ExamAnswerFillLogSerializer(serializers.ModelSerializer):
     class Meta:
     class Meta:
         model = ExamAnswerFillLog
         model = ExamAnswerFillLog
-        fields = '__all__'
+        fields = ('content', 'order', )

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

@@ -118,4 +118,47 @@ class ExamQuestionFeedbackSerializer(serializers.ModelSerializer):
 
 
     class Meta:
     class Meta:
         model = ExamQuestionFeedback
         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:
     class Meta:
         model = KnowledgeBaseFeedback
         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 rest_framework import serializers
 from .models import ErrorBook
 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):
 class ErrorBookSerializer(serializers.ModelSerializer):
     question = serializers.SerializerMethodField()
     question = serializers.SerializerMethodField()
     answer = 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:
     class Meta:
         model = ErrorBook
         model = ErrorBook
-        fields = "__all__"
+        fields = ('last_time', 'wrong_count', 'exam_name', 'question', 'answer', )
 
 
     def get_question(self, obj):
     def get_question(self, obj):
-        return ExamQuestionSerializer(obj.question).data
+        return ExamQuestionSimpleSerializer(obj.question).data
 
 
     def get_answer(self, obj):
     def get_answer(self, obj):
-        return ExamAnswerLogSerializer(obj.last_answer_log).data
+        return ExamAnswerLogSimpleSerializer(obj.last_answer_log).data