def question(request, qno): """Display a question and the form to accept the user's answer""" qno = int(qno) data = {} template = 'question/question.html' data['question'] = get_object_or_404(models.Question, qno=qno) data['marks'] = functions.get_marks(data['question']) data['attempts'] = models.Attempt.objects.filter(question=data['question'], player=request.user.profile).order_by('-stamp') if request.method == 'GET': data['answer_form'] = models.AttemptForm() if request.method == 'POST': data['answer_form'] = models.AttemptForm(request.POST, request.FILES) if data['answer_form'].is_valid(): form = data['answer_form'] attempt = form.save(commit=False) attempt.player = request.user.profile attempt.question = data['question'] attempt.marks = data['marks'] attempt.save() if functions.is_correct(attempt): # force a check request functions.update_marks(request.user.profile, attempt) return redirect('question:question', qno=qno) return render(request, template, data)
def question(request, qno): """Display a question and the form to accept the user's answer""" qno = int(qno) data = {} template = 'question/question.html' ques = get_object_or_404(models.Question, qno=qno) if (is_contest_on() or ques.practice): data['question'] = ques data['marks'] = data['question'].get_marks() data['attempts'] = models.Attempt.\ objects.filter(question=data['question'], player=request.user.profile).order_by('-stamp') if len(data['attempts']) > 0: last_correct = data['attempts'][0].correct else: last_correct = False data['last_correct'] = last_correct if not ques.has_been_answered(request.user): # Only if the question is yet to be answered, say yes if request.method == 'GET': data['answer_form'] = functions.get_attempt_form( ques, request.user.profile) if request.method == 'POST': data['answer_form'] = models.AttemptForm( request.POST, request.FILES) if data['answer_form'].is_valid(): form = data['answer_form'] attempt = form.save(commit=False) attempt.player = request.user.profile attempt.question = data['question'] attempt.marks = data['marks'] attempt.save() if attempt.is_correct(): # force a check request functions.update_marks(request.user.profile, attempt) return redirect('question:question', qno=qno) return render(request, template, data)