示例#1
0
文件: views.py 项目: MMoein/quizup
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))
示例#2
0
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
    })
示例#3
0
文件: views.py 项目: MMoein/quizup
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))
示例#4
0
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))
示例#5
0
def adminpage(request):
    form = QuestionForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('quiz:adminpage')
    else:
        return render(request, 'AddQuestion.html', locals())
示例#6
0
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})
示例#7
0
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))
示例#8
0
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
    })
示例#10
0
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))
示例#11
0
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)
示例#12
0
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
    })