示例#1
0
 def post(self, request):
     serializer = ExamCreate(data=request.data)
     if serializer.is_valid():
         name = serializer.data.get("name")
         teacher = serializer.data.get("teacher")
         exam = Exam()
         exam.name = name
         exam.Teacher = teacher
         exam.save()
         return Response(serializer.data, status=status.HTTP_201_CREATED)
示例#2
0
 def test_to_find_an_exam_with_all_its_questions(self):
     e = Exam()
     e.name = "Simple Exam"
     e.start_date = datetime.now()
     e.save()
     q = e.question_set.create()
     choice1 = MultipleChoice()
     choice1.valid = True
     choice1.text = "RED"
     q.choice_set.add(choice1)
     print(choice1.id)
     self.assertIsNotNone(choice1.id)
示例#3
0
    def post(self, request):
        ret = dict()
        try:
            user_id = request.session.get('_auth_user_id')
            exam = Exam()
            exam.create_user_id = user_id
            exam.name = request.POST.get("title")
            exam.duration = int(request.POST.get("duration"))

            types = request.POST.getlist("types", [])
            if len(types) == 0:
                raise Exception('考试类型不能为空')

            dep_id_list = []
            if 'to' in request.POST and request.POST['to']:
                dep_id_list = request.POST.getlist('to', [])
            if len(dep_id_list) == 0:
                raise Exception('考试部门不能为空')

            exam.start_time = request.POST.get("start_time")
            exam.end_time = request.POST.get("end_time")

            one_num = request.POST.get('one_num')
            one_score = request.POST.get('one_score')
            if one_num:
                if int(one_num) > 0:
                    if not one_score or float(one_score) <= 0:
                        raise Exception('请正确输入单选题数量与分数')
                    one_data_num = 0  # 判断题目数量是否足够
                    for i in types:
                        one_data = ExamOneChoose.objects.filter(type_id=i)
                        one_data_num += len(one_data)
                    if int(one_num) > one_data_num:
                        raise Exception('单选题数量超出当前题库存储数量')
                    exam.one_num = one_num
                    exam.one_score = float(one_score)
                elif int(one_num) < 0:
                    raise Exception('请正确输入单选题数量与分数')

            muti_num = request.POST.get('muti_num')
            muti_score = request.POST.get('muti_score')
            if muti_num:
                if int(muti_num) > 0:
                    if not muti_score or float(muti_score) <= 0:
                        raise Exception('请正确输入多选题数量与分数')
                    muti_data_num = 0  # 判断题目数量是否足够
                    for i in types:
                        muti_data = ExamMutiChoose.objects.filter(type_id=i)
                        muti_data_num += len(muti_data)
                    if int(muti_num) > muti_data_num:
                        raise Exception('多选题数量超出当前题库存储数量')
                    exam.muti_num = muti_num
                    exam.muti_score = float(muti_score)
                elif int(muti_num) < 0:
                    raise Exception('请正确输入多选题数量与分数')

            TorF_num = request.POST.get('TorF_num')
            TorF_score = request.POST.get('TorF_score')
            if TorF_num:
                if int(TorF_num) > 0:
                    if not TorF_score or float(TorF_score) <= 0:
                        raise Exception('请正确输入判断题数量与分数')
                    TorF_data_num = 0  # 判断题目数量是否足够
                    for i in types:
                        TorF_data = ExamTorF.objects.filter(type_id=i)
                        TorF_data_num += len(TorF_data)
                    if int(TorF_num) > TorF_data_num:
                        raise Exception('判断题数量超出当前题库存储数量')
                    exam.TorF_num = TorF_num
                    exam.TorF_score = float(TorF_score)
                elif int(TorF_num) < 0:
                    raise Exception('请正确输入判断题数量与分数')

            exam.total_score = float(request.POST.get('total_score'))
            if exam.total_score <= 0:
                raise Exception('总分不能小于等于0')
            exam.pass_score = float(request.POST.get('pass_score'))
            if exam.total_score < exam.pass_score:
                raise Exception('总分不能小于及格分数')

            exam.save()
            for t in types:
                exam_type = ExamTypeRel()
                exam_type.exam = exam
                exam_type.type_id = t
                exam_type.save()
            for d in dep_id_list:
                exam_dep = ExamDep()
                exam_dep.exam = exam
                exam_dep.dep_id = d
                exam_dep.save()
            ret['code'] = '0'
        except Exception as e:
            ret['code'] = '-1'
            ret['error'] = str(e)
        return HttpResponse(json.dumps(ret, cls=DjangoJSONEncoder),
                            content_type='application/json')