Beispiel #1
0
    def post(self, request, *args, **kwargs):
        """
        Form to insert scores and answer question.
        """

        question = self.get_object()

        form1 = AnswerQuestionForm(request.POST, prefix="alternative01")
        form2 = AnswerQuestionForm(request.POST, prefix="alternative02")
        form3 = AnswerQuestionForm(request.POST, prefix="alternative03")
        form4 = AnswerQuestionForm(request.POST, prefix="alternative04")

        self.validate_input([form1, form2, form3, form4])

        if form1.is_valid() and \
           form2.is_valid() and \
           form3.is_valid() and \
           form4.is_valid():

            score = self.get_question_score(
                question=question,
                forms=[form1, form2, form3, form4]
            )

            scores = self.get_form_scores(
                forms=[form1, form2, form3, form4]
            )

            success = self.validate_answer(scores, question)

            correct_alternative = None
            for alternative in question.alternatives.all():
                if alternative.is_correct:
                    correct_alternative = alternative

            if success:
                messages.success(
                    self.request,
                    _("Question answered successfully.")
                )

                ExerciseSubmission.objects.create(
                    session=self.get_session(),
                    user=self.request.user,
                    question=question,
                    correct_alternative=correct_alternative.title,
                    score=score
                )

        return redirect(self.get_success_url())
Beispiel #2
0
 def test_valid_form(self):
     form = AnswerQuestionForm(data={
         'content': 'A cool answer'
     })
     self.assertTrue(form.is_valid())
     self.assertEqual(form.clean(), {
         'content': 'A cool answer'
     })
Beispiel #3
0
 def test_form_can_accept_unicode_characters(self):
     form = AnswerQuestionForm(data={
         'content': 'Отговор'
     })
     self.assertTrue(form.is_valid())
     self.assertEqual(form.clean(), {
         'content': 'Отговор'
     })
Beispiel #4
0
def answer_question(request, question_id):
    question = get_object_or_404(
        Question, pk=question_id)  # Question.objects.get(pk=question_id)
    if question.asked_to != request.user:
        return HttpResponseForbidden('Not allowed!')
    form = AnswerQuestionForm(request.POST or None)
    if form.is_valid():
        answer = form.save(commit=False)
        answer.question = question
        answer.save()
        form.save_m2m()
        messages.success(request, 'Answer saved!')
        return redirect('inbox')
    return render(request,
                  "questions/answer_question.html",
                  context={
                      "form": form,
                      "question": question
                  })
Beispiel #5
0
def answer_view(request, id):
    question = get_object_or_404(MPTTComment, id=id)

    if request.method == "POST":
        post_data = request.POST.copy()
        form = AnswerQuestionForm(request, question, data=post_data)
        if form.is_valid():
            answer = form.get_comment_object()
            answer.full_clean()
            answer.save()
            return HttpResponseRedirect(question.get_absolute_url())
    else:
        form = AnswerQuestionForm(request, question)

    context = {
        'question': question,
        'form': form,
    }
    return render_to_response('answer_question.html', context, context_instance=RequestContext(request))
Beispiel #6
0
 def test_answer_text_more_than_max_length(self):
     form = AnswerQuestionForm(data={
         'content': 'A'*1026
     })
     self.assertFalse(form.is_valid())
     self.assertEqual(form.clean(), {})