1

クイズを受けようとしていますが、質問に間違って答えると、その質問が間違った質問のリストに追加されます。

質問は複数のクイズで使用できるため、ask question_1、question_2 などをハードコーディングすることはできません。

ページを読み込むと最初の質問が表示されますが、送信または更新すると right.html テンプレートが表示されます。すべての質問をするわけではありません。

right.html ページをレンダリングする前に、すべての質問をする必要があります。

for question in quiz.questions.all():
   if question not in asked_questions:
        asked_questions.append(question)
        return answer_question(request, quiz_id, question.id, module_list)

models.py

class Choice(models.Model):
    choice = models.CharField(max_length=64)
    def __unicode__(self):
        return self.choice

#create a multiple choice quiz to start
class Question(models.Model):
    question = models.CharField(max_length=64)
    answer = models.CharField(max_length=64)
    choices = models.ManyToManyField(Choice)
    module = models.CharField(max_length=64)

    def __unicode__(self):
        return self.question

class Quiz(models.Model):
    name = models.CharField(max_length=64)
    questions = models.ManyToManyField(Question)

    def __unicode__(self):
        return self.name

ビュー.py

asked_questions = []
module_list = []
module_list.append('test')

def take_quiz(request, quiz_id):
    quiz = Quiz.objects.get(id=str(quiz_id))

    for question in quiz.questions.all():
        if question not in asked_questions:
            asked_questions.append(question)
            return answer_question(request, quiz_id, question.id, module_list)
    #quiz is over
    return render (request, 'right.html')

def answer_question(request, quiz_id, question_id, module_list):
    question = Question.objects.get(id=question_id)
    #module_list = []
    if request.method == 'POST':
        form = QuestionForm(request.POST)
        choices = [(i, i) for i in question.choices.all()]
        form.fields['selection'].choices = choices

        if form.is_valid():
            if form.cleaned_data['selection'] != str(question.answer):
                module_list.append(question.module)
            return take_quiz(request, quiz_id)
    else:
        form = QuestionForm()
        choices = [(i, i) for i in question.choices.all()]
        form.fields['selection'].choices = choices

    return render(request, 'answer_question.html', {'question':question, 'form':form, 'module_list':module_list})
4

2 に答える 2

0

これをホストして Web 上で利用できるようにすることを計画している場合は、最初からやり直す必要があります。そのようなリストを使用して保存するのではなく、代わりにセッションまたはキャッシュを使用する必要があります。また、クイズにはFormWizardを使用することをお勧めします。これは、複数のフォームを処理して処理するという、まさにあなたがしようとしていることを実行するように設計されているためです。

于 2013-03-25T17:11:30.353 に答える
0

多分あなたは試してみるべきです

return HttpResponseRedirect(reverse('answer_question', args=[quiz_id, question_id, module_list]))

ビューを別のビューにリダイレクトします。

ps: リバースには「answer_question」ビューの名前を含める必要があります

于 2013-03-25T17:18:06.787 に答える