質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

724閲覧

Django: JavaScriptで作成した2つ目の配列をDjangoのViewで受け取りたい

kensoon

総合スコア48

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/24 16:26

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決できました。上述したrequestを2つ作り追加することで、希望する動作を実現することが出来ました。

投稿2021/12/25 02:36

kensoon

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問