def test_saving_and_retrieving_questions(self): quiz_ = Quiz() quiz_.save() first_question = Question() first_question.question_text = 'The first (ever) quiz Question' first_question.quiz = quiz_ first_question.save() second_question = Question() second_question.question_text = 'Question the second' second_question.quiz = quiz_ second_question.save() saved_quiz = Quiz.objects.first() self.assertEqual(saved_quiz, quiz_) saved_questions = Question.objects.all() self.assertEqual(saved_questions.count(), 2) first_saved_question = saved_questions[0] second_saved_question = saved_questions[1] self.assertEqual(first_saved_question.question_text, 'The first (ever) quiz Question') self.assertEqual(first_saved_question.quiz, quiz_) self.assertEqual(second_saved_question.question_text, 'Question the second') self.assertEqual(second_saved_question.quiz, quiz_)
def update(self, instance, validated_data): questions = validated_data.pop('questions') quiz = Quiz.objects.create(**validated_data, user=instance.user) quiz.save() for question in questions: answers = question.pop('answers') question = Question(**question) question.quiz = quiz question.save() for answer in answers: answer = Answer(**answer) answer.question = question answer.save() likes = Like.objects.filter(quiz=instance) for like in likes: like.quiz = quiz like.save() dislikes = Like.objects.filter(quiz=instance) for dislike in dislikes: dislike.quiz = quiz dislike.save() results = Result.objects.filter(quiz=instance) for result in results: result.quiz = quiz result.save() instance.delete() return quiz
def create(self, validated_data, user=None): questions = validated_data.pop('questions') quiz = Quiz.objects.create(**validated_data, user=user, is_moderated=user.licence_type == 'teacher') quiz.save() for question in questions: answers = question.pop('answers') question = Question(**question) question.quiz = quiz question.save() for answer in answers: answer = Answer(**answer) answer.question = question answer.save() return quiz
def get_quiz(request): """ Return the non-archived quiz if the resourceLinkId and contextId pair exists, if not, then check whether the resourceLinkId exists. If it does, then a new quiz is to be created which would be copy of the latest non archived version of the quiz with given resourceLinkId return new quiz. """ live_quiz = Quiz.objects.filter( consumer_key=lti.get_oauth_consumer_key(request), resourceLinkId=lti.get_resource_link_id(request), contextId=lti.get_context_id(request)) if live_quiz.exists(): return live_quiz.latest() # The resourceLinkId and the contextId pair doesn't exists, check whether the resourceLinkId exists. if Quiz.objects.filter( consumer_key=lti.get_oauth_consumer_key(request), resourceLinkId=lti.get_resource_link_id(request)).exists(): # The quiz link is being migrated to another Context (new course term), hence the non-archived # latest quiz with same resourceLinkId has to be copied over as a new Quiz. quiz = create_new_quiz(request) latest_quiz = Quiz.objects.filter( consumer_key=lti.get_oauth_consumer_key(request), resourceLinkId=lti.get_resource_link_id(request)).latest() # copy all the settings of the latest quiz associated with the RESOURCE LINK ID. quiz_settings = QuizSettings.objects.get(quiz=quiz) quiz_settings.duration = latest_quiz.duration quiz_settings.timeBetweenAttempt = latest_quiz.timeBetweenAttempt quiz_settings.maxAttempts = latest_quiz.maxAttempts quiz_settings.graded = latest_quiz.graded quiz_settings.save() #TODO: Copy all the questions , doing it manually to avoid any useless trouble: is it the right way? questions = get_questions_by_quiz(latest_quiz) for question in questions: new_question = Question() new_question.quiz = question.quiz # change the quiz to the new quiz new_question.question_type = question.question_type new_question.serial_number = question.serial_number new_question.question_weight = question.question_weight new_question.statement = question.statement new_question.options_data = question.options_data new_question.expected_response = question.expected_response new_question.other_data = question.other_data new_question.published = question.published new_question.save() return quiz # The quiz doesn't exists for associated request! Return False return False
def clone_question(modeladmin, request, queryset): for obj in queryset: new_obj = Question() new_obj.quiz = obj.quiz new_obj.question += "{} (kopie)".format(obj.question) new_obj.additional_info = obj.additional_info new_obj.image = obj.image new_obj.save() for answer in obj.answers.all(): print("Test", answer) new_answer = Answer() new_answer.answer = answer.answer new_answer.question = new_obj new_answer.save() if answer == obj.right_answer: new_obj.right_answer = new_answer new_obj.save()
def add_questions(request, quizid): user = request.user if user.is_admin(): quiz = Quiz.objects.get(quiz_id=quizid) if request.method == 'POST': q_type = strip_tags(request.POST.get('type')) ques = Question() ques.quiz = quiz ques.type = strip_tags(request.POST.get('type')) ques.marks = strip_tags(request.POST.get('marks')) ques.level = strip_tags(request.POST.get('level')) ques.time_limit = strip_tags(request.POST.get('time_limit')) ques.question = strip_tags(request.POST.get('question')) ques.negative = strip_tags(request.POST.get('negative')) # if Image is uploaded img = request.FILES.get('image') if img: ques.image = img else: print("\n\n\n\nNo File was uploaded\n\n\n\n") # if Code is added code = request.POST.get('code') if code: ques.code = code # if Question is subjective if q_type == 's': ques.subjective_answer = strip_tags( request.POST.get('subjective_answer')) # Question is objective else: ques.option_A = strip_tags(request.POST.get('option_a')) ques.option_B = strip_tags(request.POST.get('option_b')) ques.option_C = strip_tags(request.POST.get('option_c')) ques.option_D = strip_tags(request.POST.get('option_d')) ques.correct = strip_tags(request.POST.get('correct')) ques.save() return JsonResponse({'kudos': "kudos"}) # GET the page else: return render(request, 'add_questions.html', { 'title': 'Add Questions', 'quiz_data': quiz }) # User Does not has sufficient permissions else: messages.info( request, 'You do not have the permissions required to edit this quiz') return redirect('home')