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)
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)
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')