def edit_quiz(request,quiz_id):
    try:
        # check only the owner can edit
        quiz = Quiz.objects.get(pk=quiz_id,deleted=0,owner=request.user)
    except Quiz.DoesNotExist:
        raise Http404
    # TODO check a quiz can't be edited if already has attempts not by the owner
    # TODO don't allow editing of quizzes with digest props?
    QuestionFormSet = formset_factory(QuestionForm, extra=0, formset=BaseQuestionFormSet)
    
    if request.method == 'POST':
        quiz_form = QuizForm(request.POST)
        question_formset = QuestionFormSet(request.POST)
        if quiz_form.is_valid() and question_formset.is_valid():
            quiz.title = quiz_form.cleaned_data.get("title").strip()
            quiz.description = quiz_form.cleaned_data.get("description").strip()
            quiz.lastupdated_date = datetime.datetime.now()
            quiz.save()
            
            # delete all quiz questions and props
            Question.objects.filter(quiz=quiz).delete()
            QuizProps.objects.filter(quiz=quiz).delete()
            
            process_quiz(request,quiz,question_formset)
            return HttpResponseRedirect('../saved/')
    else:
        quiz_form = QuizForm(initial={'title':quiz.title,
                                    'description':quiz.description})
        initial = []
        questions = Question.objects.filter(quiz=quiz)
        for q in questions:
            data = {}
            data['title'] = q.title
            data['type'] = q.type
            responses = Response.objects.filter(question=q)
            for idx, r in enumerate(responses):
                data['response'+str(idx+1)] = r.title
                data['score'+str(idx+1)] = r.score
                try:
                    r_feedback = ResponseProps.objects.get(response=r,name='feedback')
                    data['feedback'+str(idx+1)] = r_feedback.value
                except:
                    data['feedback'+str(idx+1)] = ""
            initial.append(data)
        question_formset = QuestionFormSet(initial=initial)

    return render(request, 'mquiz/quiz/quiz.html', {'title': _(u"Edit Quiz"), 'quiz_form': quiz_form,'question_formset':question_formset})
def create_quiz(request):
    QuestionFormSet = formset_factory(QuestionForm, extra=3, formset=BaseQuestionFormSet)
    
    if request.method == 'POST':
        quiz_form = QuizForm(request.POST)
        question_formset = QuestionFormSet(request.POST)
        
        if quiz_form.is_valid() and question_formset.is_valid():
            quiz = quiz_form.save(commit=False)
            quiz.lastupdated_date = datetime.datetime.now()
            quiz.owner = request.user
            quiz.save()
            process_quiz(request, quiz, question_formset)
            return HttpResponseRedirect('../%d/saved/' % quiz.id)
    else:
        quiz_form = QuizForm() # An unbound form
        question_formset = QuestionFormSet()

    return render(request, 'mquiz/quiz/quiz.html', {'title': _(u"Create Quiz"), 'quiz_form': quiz_form,'question_formset':question_formset})