def add_question(request): if not request.user.is_authenticated(): return redirect(reverse('login')) errors = [] if request.method == 'POST': question_form = QuestionForm(data=request.POST) if question_form.is_valid(): question_form.save() new_question_form = QuestionForm() return render_to_response('quiz/add_question.html', { 'question_form': new_question_form, 'messages': u'سوال جدید اضافه شد' }, context_instance=RequestContext(request)) else: return render_to_response('quiz/add_question.html', { 'question_form': question_form, 'error_message': question_form.errors }, context_instance=RequestContext(request)) elif request.method == 'GET': question_form = QuestionForm() return render_to_response('quiz/add_question.html', { 'question_form': question_form, 'error_message': errors }, context_instance=RequestContext(request))
def questionEdit(request, quiz_pk, question_pk): quiz = get_object_or_404(Quiz, pk=quiz_pk, owner=request.user) question = get_object_or_404(Question, pk=question_pk, quiz=quiz) AnswerFormSet = inlineformset_factory(Question, Answer, formset=BaseAnswerInlineFormset, fields=("content", "is_correct"), min_num=4, validate_min=True, max_num=4, validate_max=True) if request.method == "POST": form = QuestionForm(request.POST, instance=question) formset = AnswerFormSet(request.POST, instance=question) if form.is_valid() and formset.is_valid(): form.save() formset.save() return redirect('quizEdit', quiz.pk) else: form = QuestionForm(instance=question) formset = AnswerFormSet(instance=question) return render(request, 'Question/questionEdit.html', { 'quiz': quiz, 'question': question, 'form': form, 'formset': formset })
def add_question(request): if not request.user.is_authenticated(): return redirect(reverse('login')) errors = [] if request.method == 'POST': question_form = QuestionForm(data=request.POST) if question_form.is_valid(): question_form.save() new_question_form = QuestionForm() return render_to_response('quiz/add_question.html', {'question_form': new_question_form, 'messages': u'سوال جدید اضافه شد'}, context_instance=RequestContext(request)) else: return render_to_response('quiz/add_question.html', {'question_form': question_form, 'error_message': question_form.errors}, context_instance=RequestContext(request)) elif request.method == 'GET': question_form = QuestionForm() return render_to_response('quiz/add_question.html', {'question_form': question_form, 'error_message': errors}, context_instance=RequestContext(request))
def question_view(request, quiz_id, question_id): """ opens the selected question in the preview mode. """ """ update the quiz, given its id. """ quiz = Quiz.objects.get(id=quiz_id) #two unnecessary sql queries. question = Question.objects.get(id=question_id) questions = quiz.question_set.all() if request.method == "POST": question_form = QuestionForm(request.POST, request.FILES, instance=question) question_form.is_update = True if question_form.is_valid(): question_form.save() return HttpResponseRedirect(reverse("quiz.views.question_view", args=[quiz_id, question_id])) else: #GET request. question_form = QuestionForm(instance=question) return render_to_response("quiz/create_question.html", { "question_form" : question_form, ##this is a redundant field, passed here; must be removed. "selected_question": question, "questions" : questions, "quizobj" : quiz, }, context_instance=RequestContext(request)) #generic case return render_to_response("quiz/create_question.html", { "question_form" : question_form, ##this is a redundant field, passed here; must be removed. "selected_question" : question, "questions" : questions, "quizobj" : quiz, }, context_instance=RequestContext(request))
def adminpage(request): form = QuestionForm(request.POST) if form.is_valid(): form.save() return redirect('quiz:adminpage') else: return render(request, 'AddQuestion.html', locals())
def questionform_view(request): form = QuestionForm() if request.method == "POST": form = QuestionForm(request.POST) if form.is_valid(): form.save() return redirect('quiz:list') return render(request, 'quiz/question.html', {'form': form})
def question_new(request, quiz_id): """ returns a template to create a new quiz. """ quiz = Quiz.objects.get(id=quiz_id) questions = quiz.question_set.all() if request.method == "POST": question_form = QuestionForm(request.POST, request.FILES) if question_form.is_valid(): new_question = question_form.save(commit=False) new_question.qQuiz = quiz new_question.save() return HttpResponseRedirect(reverse("quiz.views.question_new", args=[quiz_id])) #GET Request else: question_form = QuestionForm() return render_to_response('quiz/create_question.html', { "question_form" : question_form, "questions" : questions, "quizobj" : quiz, }, context_instance=RequestContext(request)) return render_to_response('quiz/create_question.html', { "question_form" : question_form, "questions" : questions, "quizobj" : quiz, }, context_instance=RequestContext(request))
def question_create(request, quiz_id, question_id=None): """ returns a template to create a new quiz. """ quiz = get_object_or_404(Quiz, id=quiz_id, owner=request.user) iscomplete = True if request.method == "POST": question_form = QuestionForm(request.POST) answer_formset = AnswerFormSet(request.POST) if question_form.is_valid() and answer_formset.is_valid(): """ @todo : this must be moved to the quiz-manager """ new_question = question_form.save(commit=False) new_question.number = (quiz.quiz_questions.aggregate(Max('number'))['number__max'] or 0) +1 new_question.owner = request.user new_question.quiz = quiz new_question.save() for answer_form in answer_formset.forms: new_answer = answer_form.save(commit=False) new_answer.owner = request.user new_answer.question = new_question new_answer.save() ##status updation is ugly, must be fixed. iscomplete = iscomplete and not (new_answer.option == '') ##status updation is ugly, must be fixed. iscomplete = iscomplete and not (new_question.text == '') if iscomplete: new_question.status = "complete" new_question.save() if len(quiz.quiz_questions.filter(status="incomplete")) == 0: quiz.status = "complete" else: quiz.status = "incomplete" quiz.save() request.user.message_set.create(message="the question was created successfully. yeppie! add another") return HttpResponseRedirect(reverse("quiz.views.question_create", args=[quiz_id])) #GET Request else: question_form = QuestionForm() answer_formset = AnswerFormSet(queryset=Answer.objects.none()) return render_to_response('quiz/question_form.html', { "question_form" : question_form, "answer_formset" : answer_formset, "questions" : quiz.quiz_questions.all().order_by('number'), "quizobj" : quiz, "selected_button" : "create", "current_question" : (quiz.quiz_questions.aggregate(Max('number'))['number__max'] or 0) +1, "pagetitle" : "Create Question", }, context_instance=RequestContext(request))
def question_change(request, quiz_pk, question_pk): # Simlar to the `question_add` view, this view is also managing # the permissions at object-level. By querying both `quiz` and # `question` we are making sure only the owner of the quiz can # change its details and also only questions that belongs to this # specific quiz can be changed via this url (in cases where the # user might have forged/player with the url params. quiz = get_object_or_404(Quiz, pk=quiz_pk, owner=request.user) question = get_object_or_404(Question, pk=question_pk, quiz=quiz) AnswerFormSet = inlineformset_factory( Question, # parent model Answer, # base model formset=BaseAnswerInlineFormSet, fields=('text', 'is_correct'), min_num=2, validate_min=True, max_num=10, validate_max=True) if request.method == 'POST': form = QuestionForm(request.POST, instance=question) formset = AnswerFormSet(request.POST, instance=question) if form.is_valid() and formset.is_valid(): with transaction.atomic(): form.save() formset.save() messages.success(request, 'Question and answers saved with success!') return redirect('instructor:quiz_change', quiz.pk) else: form = QuestionForm(instance=question) formset = AnswerFormSet(instance=question) return render(request, 'question_change_form.html', { 'quiz': quiz, 'question': question, 'form': form, 'formset': formset })
def question_update(request, quiz_id, question_id): """ opens the selected question in the preview mode. """ quiz = get_object_or_404(Quiz, id=quiz_id, owner=request.user) question = get_object_or_404(Question, quiz=quiz, number=question_id) answers = Answer.objects.filter(question=question) iscomplete = True if request.method == "POST": question_form = QuestionForm(request.POST, instance=question) answer_formset = AnswerFormSet(request.POST) if question_form.is_valid() and answer_formset.is_valid(): answers.delete() new_question = question_form.save() for answer_form in answer_formset.forms: answer_form = answer_form.save(commit=False) answer_form.owner = request.user answer_form.question = question answer_form.save() ##status updation is ugly, must be fixed. iscomplete = iscomplete and not (answer_form.option == '') ##status updation is ugly, must be fixed. iscomplete = iscomplete and not (new_question.text == '') if iscomplete: new_question.status = "complete" else: new_question.status = "incomplete" new_question.save() if len(quiz.quiz_questions.filter(status="incomplete")) == 0: quiz.status = "complete" else: quiz.status = "incomplete" quiz.save() request.user.message_set.create(message="the question was updated successfully :D ") return HttpResponseRedirect(reverse("quiz.views.question_view", args=[quiz_id, question_id])) #GET Request else: question_form = QuestionForm(instance=question) answer_formset = AnswerFormSet(queryset=Answer.objects.filter(question=question)) return render_to_response("quiz/question_form.html", { "quizobj" : quiz, "questions" : quiz.quiz_questions.all().order_by('number'), "question_form" : question_form, "answer_formset" : answer_formset, "selected_question": question, "pagetitle" : "Update Question", }, context_instance=RequestContext(request))
def add_question(request, quiz_id): quiz = get_object_or_404(Quiz, pk=quiz_id) context = {'quiz': quiz} if request.method == 'POST': form = QuestionForm(request.POST) if form.is_valid(): question = form.save() if form.cleaned_data['add_another']: return redirect('quiz:add_question', quiz.id) else: return redirect('quiz:quiz', quiz_id) else: form = QuestionForm(initial={'quiz': quiz}) context['form'] = form return render(request, 'quiz/add_question.html', context)
def questionAdd(request, pk): quiz = get_object_or_404(Quiz, pk=pk, owner=request.user) if request.method == "POST": form = QuestionForm(request.POST) if form.is_valid(): question = form.save(commit=False) question.quiz = quiz quiz.total_marks = quiz.total_marks + question.marks quiz.save() question.save() return redirect('questionEdit', quiz.pk, question.pk) else: form = QuestionForm() return render(request, 'Question/questionAdd.html', { 'quiz': quiz, 'form': form })
def question_add(request, pk): # By filtering the quiz by the url keyword argument `pk` and # by the owner, which is the logged in user, we are protecting # this view at the object-level. Meaning only the owner of # quiz will be able to add questions to it. quiz = get_object_or_404(Quiz, pk=pk, owner=request.user) if request.method == 'POST': form = QuestionForm(request.POST) if form.is_valid(): question = form.save(commit=False) question.quiz = quiz question.save() messages.success( request, 'You may now add answers/options to the question.') return redirect('instructor:question_change', quiz.pk, question.pk) else: form = QuestionForm() return render(request, 'question_add_form.html', { 'quiz': quiz, 'form': form })