diff --git a/test_server/examtest/models.py b/test_server/examtest/models.py index b81a205..639f2c2 100644 --- a/test_server/examtest/models.py +++ b/test_server/examtest/models.py @@ -4,6 +4,8 @@ from django.contrib.postgres.fields import JSONField, ArrayField from question.models import Questioncat, Question from crm.models import Consumer + + # Create your models here. class TestRule(SoftCommonModel): name = models.CharField(max_length=200, unique=True, verbose_name='名称') @@ -28,6 +30,10 @@ class TestRule(SoftCommonModel): def __str__(self): return self.name +class WorkScope(SoftCommonModel): + name = models.CharField(max_length=200, unique=True, verbose_name='名称') + questioncat = models.ManyToManyField(Questioncat, verbose_name='所选题库') + rule = models.ForeignKey(TestRule, on_delete=models.CASCADE, verbose_name='试卷结构') class Paper(SoftCommonModel): name = models.CharField(max_length=200, verbose_name='名称') diff --git a/test_server/media/20200325/39f8f98a-6e45-11ea-997f-90cdb685c056.xlsx b/test_server/media/20200325/39f8f98a-6e45-11ea-997f-90cdb685c056.xlsx new file mode 100644 index 0000000..599913d Binary files /dev/null and b/test_server/media/20200325/39f8f98a-6e45-11ea-997f-90cdb685c056.xlsx differ diff --git a/test_server/media/20200325/7b63313a-6e44-11ea-a9fe-90cdb685c056.xlsx b/test_server/media/20200325/7b63313a-6e44-11ea-a9fe-90cdb685c056.xlsx new file mode 100644 index 0000000..599913d Binary files /dev/null and b/test_server/media/20200325/7b63313a-6e44-11ea-a9fe-90cdb685c056.xlsx differ diff --git a/test_server/media/20200325/d2696f62-6e44-11ea-b540-90cdb685c056.xlsx b/test_server/media/20200325/d2696f62-6e44-11ea-b540-90cdb685c056.xlsx new file mode 100644 index 0000000..599913d Binary files /dev/null and b/test_server/media/20200325/d2696f62-6e44-11ea-b540-90cdb685c056.xlsx differ diff --git a/test_server/media/20200325/df97bb0a-6e43-11ea-bf01-90cdb685c056.xlsx b/test_server/media/20200325/df97bb0a-6e43-11ea-bf01-90cdb685c056.xlsx new file mode 100644 index 0000000..599913d Binary files /dev/null and b/test_server/media/20200325/df97bb0a-6e43-11ea-bf01-90cdb685c056.xlsx differ diff --git a/test_server/question/migrations/0008_auto_20200325_0959.py b/test_server/question/migrations/0008_auto_20200325_0959.py new file mode 100644 index 0000000..0b752e1 --- /dev/null +++ b/test_server/question/migrations/0008_auto_20200325_0959.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.4 on 2020-03-25 01:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('question', '0007_auto_20200319_0846'), + ] + + operations = [ + migrations.AlterModelOptions( + name='questioncat', + options={'verbose_name': '题库/学科类别', 'verbose_name_plural': '题库/学科类别'}, + ), + migrations.AddField( + model_name='questioncat', + name='type', + field=models.CharField(choices=[('公共', '公共'), ('专业', '专业')], default='专业', max_length=50, verbose_name='科目类型'), + ), + ] diff --git a/test_server/question/models.py b/test_server/question/models.py index 15c00ce..2a6307a 100644 --- a/test_server/question/models.py +++ b/test_server/question/models.py @@ -5,11 +5,16 @@ from django.contrib.postgres.fields import JSONField, ArrayField class Questioncat(SoftCommonModel): + type_choices = ( + ('公共', '公共'), + ('专业', '专业'), + ) name = models.CharField(max_length=200, unique=True, verbose_name='名称') pid = models.ForeignKey('self', verbose_name='父', null=True, blank=True, on_delete=models.CASCADE, related_name='questioncatpid') is_subject = models.BooleanField(default=False, verbose_name='是否是学科') + type = models.CharField(max_length=50, default='专业', choices=type_choices, verbose_name='科目类型') class Meta: - verbose_name = '题库类别/学科类别' + verbose_name = '题库/学科类别' verbose_name_plural = verbose_name def __str__(self): diff --git a/test_server/question/views.py b/test_server/question/views.py index b025b26..4fbd999 100644 --- a/test_server/question/views.py +++ b/test_server/question/views.py @@ -9,6 +9,7 @@ from rest_framework import status from django_filters.rest_framework import DjangoFilterBackend from openpyxl import Workbook, load_workbook from rest_framework_jwt.authentication import JSONWebTokenAuthentication +import json from utils.custom import CommonPagination from rbac.permission import RbacPermission @@ -69,7 +70,7 @@ class QuestioncatViewSet(ModelViewSet): serializer_class = QuestioncatSerializer pagination_class = CommonPagination ordering_fields = ['id'] - ordering = ['id'] + ordering = ['type','id'] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filterset_fields = ['pid'] search_fields = ['^name'] @@ -185,7 +186,9 @@ class QuestionViewSet(ModelViewSet): answer['F'] = sheet['i'+str(i)].value right = sheet['j'+str(i)].value.replace(' ', '') resolution = sheet['k'+str(i)].value - level = sheet['l'+str(i)].value.replace(' ', '') + level = sheet['l'+str(i)].value + if level: + level = level.replace(' ', '') if questioncat not in questioncatdict: return Response({"error":"不存在分类("+questioncat+")!请先新建"}) else: @@ -248,10 +251,7 @@ class QuestionViewSet(ModelViewSet): obj.level = '低' obj.save() i = i +1 - if notinlist: - return {"code":206,"data":notinlist,"msg":"导入部分成功"} - else: - return Response(status=status.HTTP_200_OK) + return Response(status=status.HTTP_200_OK) class ExerciseView(APIView): authentication_classes = [ConsumerTokenAuthentication]