2

多数のテキストエリアを含むフォームを作成したいと考えています。ユーザーがページ上のボタンを押して、別のテキストエリアをフォームに追加できることが理想的です。私はこの単純な部分をほんの少しの JS で動作させましたが、このフォームを送信して結果を Django に保存する方法がわかりません。常に同じ数のテキストエリアがある場合は、簡単ですが、変数で行う方法がわかりません。私のHTMLは次のようになります。

<body>
    <form action="foo" method="post" id="survey_form">
      <input type="textarea" rows="4" cols="20">
    </form>
    <button onclick="addQuestion();">add question</button>
</body>

このaddQuestion()関数は、別のテキストエリア入力をフォームに追加するだけです:

function addQuestion() {
    var form = document.getElementById('survey_form');
    var new_text_area = document.createElement('input');
    new_text_area.setAttribute('type','textarea');
    new_text_area.setAttribute('rows', '4');
    new_text_area.setAttribute('cols', '20');
    form.appendChild(new_text_area);
}

私の Django モデルには、文字列のリスト用のフィールドがあります。これは正常に動作しています。問題は、フォーム データをrequest.POSTリストとして取得する方法です。新しいテキストエリアごとに一意の識別子 ( textarea_1textarea_2など) を付け、ループしてrequest.POST['textarea_' + str(i)]存在するかどうかを確認し、それを文字列のリストに追加することを考えていました。ただし、これは非常に非効率的で、起動するのがかなり醜いようですこれを行うためのより良い、より Pythonic な方法はありますか?

また、各テキストエリアに一意の識別子を与える方法については完全にはわかりません.JSは初めてで、すべての知識はGoogle検索から得ました. インデックス変数にクロージャーを使用し、呼び出されるたびiにインクリメントすることを考えていました。それは理にかなっていますか?iaddQuestion()

そして最後に、プログラマー向けの JS に関する簡単な実践的なチュートリアルへのポインタをいただければ幸いです。

4

1 に答える 1

3

フォームセットを使用します。1 つのフォームで複数のオブジェクトを編集できます。フォームセットは理想的には Question クラスにあります。

id_form-1-contentJS から、id_form-2-contentなどの名前の新しいテキストエリアを追加します。

そして、あなたの見解では、次のようなものがあります:

formset = QuestionFormSet(request.POST)
if formset.is_valid(): 
    # etc.
于 2012-05-26T16:49:47.490 に答える