浏览代码

试题管理web 查询接口

wushaodong 3 年之前
父节点
当前提交
9a869d5a59

+ 15 - 0
apps/examination/examquestion/filters.py

@@ -0,0 +1,15 @@
+# coding=utf-8
+import django_filters
+
+from .models import *
+
+class ExamQuestionFilter(django_filters.FilterSet):
+    chapter = django_filters.CharFilter(field_name='chapter_id')
+    subject = django_filters.CharFilter(field_name='chapter__subject_id')
+    type = django_filters.CharFilter(field_name='type')
+    title = django_filters.CharFilter(field_name='title', lookup_expr='icontains')
+
+    class Meta:
+        model = ExamQuestion
+        fields = '__all__'
+

+ 3 - 3
apps/examination/examquestion/models.py

@@ -36,7 +36,7 @@ class ExamQuestion(models.Model):
     title = models.TextField(verbose_name=u"题目")
     judgment = models.BooleanField(verbose_name=u'判断题答案', default=False)
     analysis = models.TextField(verbose_name=u"解析", null=True, blank=True)
-    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'录入人', editable=False, on_delete=models.PROTECT)
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'录入人',related_name='exam_question_user', editable=False, on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"录入时间", default=timezone.now, editable=False)
     delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
 
@@ -92,7 +92,7 @@ class ExamQuestionFeedback(models.Model):
     main = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
     type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"错误类型")
     desc = models.TextField(verbose_name=u"错误描述")
-    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'反馈人', editable=False, on_delete=models.PROTECT)
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'反馈人',related_name='exam_question_feedback_user', editable=False, on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"反馈时间", default=timezone.now, editable=False)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'处理状态', default=UNTREATED)
     process_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"处理人", on_delete=models.PROTECT, null=True)
@@ -102,4 +102,4 @@ class ExamQuestionFeedback(models.Model):
         db_table = "exam_question_feedback"
         ordering = ['-id']
         verbose_name = u"错误反馈"
-        default_permissions = ()
+        default_permissions = ()

+ 17 - 0
apps/examination/examquestion/serializers.py

@@ -0,0 +1,17 @@
+# coding=utf-8
+from rest_framework import serializers
+from .models import *
+
+class ExamQuestionSerializer(serializers.ModelSerializer):
+    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+    type_text = serializers.CharField(source='get_type_display', read_only=True)
+    difficulty_text = serializers.CharField(source='get_difficulty_display', read_only=True)
+
+    class Meta:
+        model = ExamQuestion
+        fields = ('id', 'type_text', 'title',  'difficulty_text','create_user_text', 'create_time', )
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(ExamQuestionSerializer, self).create(validated_data)
+        return instance

+ 12 - 0
apps/examination/examquestion/urls.py

@@ -0,0 +1,12 @@
+# 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'', ExamQuestionViewSet)
+urlpatterns += router.urls

+ 23 - 0
apps/examination/examquestion/views.py

@@ -0,0 +1,23 @@
+# coding=utf-8
+import json
+from django.db.models import Sum, F
+from rest_framework.decorators import action
+from rest_framework.views import APIView
+from django.db import transaction
+from django.db.models import Q
+from utils.custom_modelviewset import CustomModelViewSet
+from .serializers import *
+from .filters import *
+from utils import response_ok, response_error
+from utils.permission import IsAdministrator
+from .models import *
+
+class ExamQuestionViewSet(CustomModelViewSet):
+    permission_classes = [IsAdministrator, ]
+    queryset = ExamQuestion.objects.filter()
+    serializer_class = ExamQuestionSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter()
+        f = ExamQuestionFilter(self.request.GET, queryset=queryset)
+        return f.qs

+ 10 - 0
apps/examination/urls.py

@@ -0,0 +1,10 @@
+# coding=utf-8
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+urlpatterns = [
+    url(r'^examquestion/', include('apps.examination.examquestion.urls')),
+]
+
+router = SimpleRouter()
+urlpatterns += router.urls

+ 2 - 1
ks/urls.py

@@ -23,7 +23,8 @@ urlpatterns = [
     url(r'^$', index),
     url(r'^admin/', include('apps.api.admin.urls')),
     url(r'^staff/', include('apps.api.staff.urls')),
+    url(r'^examination/', include('apps.examination.urls')),
 ]
 
 urlpatterns += static(settings.UIS_URL, document_root=settings.UIS_ROOT)
-urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

+ 20 - 38
uis/admin/examquestion/index.html

@@ -67,9 +67,6 @@
                             <button class="layui-btn layui-btn-sm" id="exam_question_add">
                                 <i class="layui-icon layui-icon-add-circle"></i>添加
                             </button>
-                            <button class="layui-btn layui-btn-sm" id="exam_question_add">
-                                <i class="layui-icon layui-icon-cols"></i>批量导入
-                            </button>
                         </div>
                         <form class="layui-form" lay-filter="query-form-element">
                             <div class="seach_items">
@@ -78,7 +75,7 @@
                                 </button>
                             </div>
                             <div class="seach_items">
-                                <input type="text" name="name" autocomplete="off" class="layui-input"
+                                <input type="text" name="title" autocomplete="off" class="layui-input"
                                        placeholder="名称"/>
                             </div>
                         </form>
@@ -87,10 +84,18 @@
                     <table class="layui-hide" id="exam_question_datagrid" lay-filter="exam_question-operate"></table>
 
                     <script type="text/html" id="exam_question-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="exam_question_edit"
+                            >查看</a>
+                        </div>
                         <div class="layui-btn-group">
                             <a class="layui-btn layui-btn-xs" lay-event="exam_question_edit"
                             >修改</a>
                         </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="exam_question_edit"
+                            >删除</a>
+                        </div>
                     </script>
                 </div>
             </div>
@@ -104,28 +109,25 @@
         base: '../../../layuiadmin/' //静态资源所在路径
     }).extend({
         index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'form', ], function () {
+    }).use(['index', 'table', 'form',], function () {
         var $ = layui.$;
         var table = layui.table
             , form = layui.form;
 
         table.render({
             elem: '#exam_question_datagrid'
-            , url: '/exam_question/'
+            , url: '/examination/examquestion/'
             , cols: [[
                 {title: '编号', type: 'numbers'}
-                , {field: 'introduce', title: '题型', width: 100}
-                , {field: 'price', title: '内容', width: 200}
-                , {field: 'days', title: '难度', width: 100}
-                , {field: 'amount', title: '录入人', width: 150}
-                , {field: 'create_time_f', title: '录入时间', width: 150}
-                , {title: '操作', width: 80, align: 'center', fixed: 'right', toolbar: '#exam_question-operate-bar'}
+                , {field: 'type_text', title: '难度', width: 100}
+                , {field: 'title', title: '内容', width: 400}
+                , {field: 'difficulty_text', title: '题型', width: 100}
+                , {field: 'create_user_text', title: '录入人', width: 150}
+                , {field: 'create_time', title: '录入时间', width: 200}
+                , {title: '操作', width: 180, align: 'center', fixed: 'right', toolbar: '#exam_question-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
-            , done: function () {
-                layui.index.removeNoPermButtons();
-            }
         });
 
         //监听工具条
@@ -135,7 +137,7 @@
             if (obj.event === 'exam_question_edit') {
                 layer.open({
                     type: 2,
-                    title: '修改',
+                    title: '修改试题',
                     shadeClose: false,
                     area: ['40%', '80%'],
                     btn: ['保存', '取消'],
@@ -151,30 +153,10 @@
                     },
                     content: 'edit.html?id=' + data.id
                 });
-            } else if (obj.event === 'upload_main' || obj.event === 'upload_list') {
-                layer.open({
-                    type: 2,
-                    title: obj.event === 'upload_main' ? '上传主图片' : '上传列表图片',
-                    shadeClose: false,
-                    area: ['40%', '80%'],
-                    btn: ['保存', '取消'],
-                    yes: function (index, dom) {
-                        layui.onSubmitChild = function (res) {
-                            layer.close(index);
-                            table.reload('exam_question_datagrid', {});
-                        };
-                        layui.submitChild();
-                    },
-                    btn2: function (index, layero) {
-                        layer.close(index);//关闭当前按钮
-                        table.reload('exam_question_datagrid', {});
-                    },
-                    content: 'uploadImage.html?id=' + data.id + '&type=' + obj.event
-                });
             } else if (obj.event === 'upload_detail') {
                 layer.open({
                     type: 2,
-                    title: '上传详情图片',
+                    title: '查看详情',
                     shadeClose: false,
                     area: ['80%', '80%'],
                     btn: ['保存', '取消'],
@@ -206,7 +188,7 @@
         $('#exam_question_add').on('click', function () {
             layer.open({
                 type: 2,
-                title: '添加',
+                title: '添加试题',
                 area: ['40%', '80%'],
                 btn: ['保存', '取消'],
                 yes: function (index, dom) {