前提・実現したいこと
Djangoで英単語学習をサポートするシステムを作っています。4択形式の簡単なクイズの正誤を判定し、それをViewで受け取りたいと思っています。
間違っていた英単語のIDのみを受け取っているときは上手く動作していたのですが、正解した英単語のIDを追加で送信する方法が思いつかずに困っています。
状況としては、正解した英単語のID自体はword-idとして取得できていますので、同じ形式のものをもう1つ送りたい、という希望になります。宜しくお願いします。
上手く動作していたときのJavaScriptとPythonのコード
JavaScript
1 <script> 2 3 function aggregate() { 4 let result = 0; 5 let quiz_length = document.getElementById('quiz-length').value; 6 let wrong_answer_word_id = []; 7 8 for (let i = 1; i <= quiz_length; i++){ 9 let answer = document.getElementById(`answer-${i}`).value; 10 let choices = document.getElementsByName(`quiz-${i}`); 11 let word_id = document.getElementById(`id-${i}`).value; 12 13 for (var j = 0; j < choices.length; j++){ 14 if (choices[j].checked) { 15 if (answer == choices[j].value){ 16 result++; 17 } 18 else { 19 wrong_answer_word_id.push(word_id); 20 } 21 break; 22 } 23 } 24 } 25 document.getElementById("number-of-right-answer").textContent = result; 26 document.getElementById("wrong-problem").textContent = wrong_answer_word_id; 27 28 let form = document.createElement('form'); 29 let request1 = document.createElement('input'); 30 31 form.method = "POST"; 32 form.action = "{% url 'english_words:quiz_feedback' %}"; 33 form.id = "wrong_answer_word_id"; 34 35 request.type = 'hidden'; 36 request.name = 'wrong_word_id'; 37 request.value = wrong_answer_word_id; 38 39 let csrf_element = document.createElement('input'); 40 csrf_element.type = 'hidden'; 41 csrf_element.name = 'csrfmiddlewaretoken'; 42 csrf_element.value = '{{ csrf_token }}'; 43 44 form.appendChild(csrf_element); 45 form.appendChild(request); 46 document.body.appendChild(form); 47 48 form.submit(); 49 } 50 51 </script>
python
1def quiz_feedback(request): 2 returned_post = request.POST["wrong_word_id"] 3 separeted_id_list = [int(splitted_string) for splitted_string in returned_post.split(",")] 4
試した方法
- requestをもう一つ作成し、appendする方法
JavaScript
1let correct_answer_word_id = []; 2correct_answer_word_id.push(word_id); 3... 4request2.type = 'hidden'; 5request2.name = 'correct_word_id'; 6request2.value = correct_answer_word_id; 7... 8form.appendChild(request2);
こちらはView側でObjectという表示になって、配列からのデコードの方法がわかりませんでした。
- JavaScript側でJson形式のデータを作成し、それをvalueに代入して送信する方法
JavaScript
1 request.value = JSON.stringify( 2 { 3 wrong_word: wrong_answer_word_id, 4 correct_word: correct_word_id, 5 } 6 )
こちらはformが動作しなくなり、ページが遷移しなくなりました。
補足情報(FW/ツールのバージョンなど)
Python3.8.12
Django3.2.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。