コード例 #1
0
ファイル: tests.py プロジェクト: a5720128a/test2quiz
    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_)
コード例 #2
0
    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
コード例 #3
0
 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
コード例 #4
0
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
コード例 #5
0
ファイル: admin.py プロジェクト: sh4wn/mri-quiz
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()
コード例 #6
0
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')