2017-02-08 10 views
0

でスコアを取得、私はは私MCQアプリについては私のMCQ APP-ジャンゴ

def process_data(request): 
question_set=Question.objects.all() 
choice_list=[] 
question_set 
for k, v in request.POST.items(): 
    if k.startswith('choice'): 
     choice_list.append(v) 
i=0 
score=0 
print type(question_set) 
for question in question_set: 
     if question.answer1==choice_list[i]: 
      #print question.answer1 
      i=i+1 
      score=score+1 
return HttpResponse(score) 

ビューを作成していないhtmlページでは、このような形の外観が含まれています。

{% extends 'quiz/base.html' %} 
{% block content%} 
<h1>You are at quiz page</h1> 

<form action="{% url 'quiz:process_data' %}" method="post"> 
    {% csrf_token %} 
    {% for question in question_set %} 
     <h3>{{question.question_no}}.{{question.question_text }}</h3> 
     <input type="radio" name="choice{{ question.question_no}}" value="{{ question.option1 }}">{{ question.option1 }}<br> 
     <input type="radio" name="choice{{ question.question_no}}" value="{{ question.option2 }}">{{ question.option2 }}<br> 
     <input type="radio" name="choice{{ question.question_no}}" value="{{ question.option3 }}">{{ question.option3 }}<br> 
     <input type="radio" name="choice{{ question.question_no}}" value="{{ question.option4 }}">{{ question.option4 }}<br> 
     <input type="radio" name="choice{{ question.question_no}}" value="{{ question.option5 }}">{{ question.option5 }}<br> 
    {% endfor %} 
    <input type="Submit" name="Submit"> 
</form> 
{% endblock%} 

と、この問題は、スコアが正しく取得されていないということです質問

class Question(models.Model): 
    question_no=models.IntegerField(default=0) 
    question_text=models.CharField(max_length=1000) 
    option1=models.CharField(max_length=100) 
    option2=models.CharField(max_length=100) 
    option3=models.CharField(max_length=100) 
    option4=models.CharField(max_length=100) 
    option5=models.CharField(max_length=100) 
    answer1=models.CharField(max_length=100) 

    def __str__(self): 
    return self.question_text 

のモデルです。私はprintステートメントでそれをテストし、最初の質問だけがうまくいくことに気付きました。どうすればスコアを正しく取得できますか?ありがとうございます

答えて

0

問題は、この電話番号request.POST.itemの処理方法です。 item関数を呼び出すと、順序付けられていない辞書が返されます。これにより、2番目のfor-loopが間違った質問に対するユーザーの入力と一致するようになります。以下は、私が何を意味するかのサンプルコードです:

user_inputs = request.POST.items() # key: choice<question_no> and value: <user_choice> 
for question in question_set: 
    user_choice = user_inputs.get('choice'+question.question_no) 
    if user_choice == question.answer1: 
     //count the score 
+0

エラー「リ​​スト」オブジェクトには属性ラインで – Ananthu

+0

「を取得」「user_choice = user_inputs.get( 『選択』 + question.question_no)」 – Ananthu

+0

これを持っていません取得動かない :( – Ananthu

関連する問題