2016-07-19 4 views
1

テンプレートには2つの接続リストがあり、そのうちの1つは最初は空です。ユーザーは、左のリストから最大3つのオプションを選択し、それらを右のリストに追加し、それらの順序を(優先順位にしたがって)順序付けしてから戻す必要があります。djangoのフォームにulのリストを送ってください

それは次のようになります。

<ul id="sortable1" class="connectedSortable"> 
    <li value="1">Item A</li> 
    <li value="2">Item B</li> 
    <li value="3">Item C</li> 
    <li value="4">Item D</li> 
    <li value="5">Item E</li> 
    <li value="6">Item F</li> 
    <li value="7">Item G</li> 
</ul> 
</div> 

<ul id="sortable2" class="connectedSortable"> 
<!--here goes the initially empty list--> 
</ul> 

と{%のスクリプト%}ブロックに:

preferences = CommaSeparatedIntegerField() 
:models.pyで

<script> 
    $(function() { 
    $("#sortable1, #sortable2").sortable({ 
     connectWith: ".connectedSortable" 
    }).disableSelection(); 
    }); 
</script> 

私が選択した情報を格納するためのフィールドを持っています

更新されたul(sortable2)の情報をデータベースにPOSTする方法は問題ですか?隠しフィールドpreferencesをページに追加してjQueryを使用して埋め込むことができますが、これは醜い解決策のようです。正しいものは何ですか?

答えて

0

あなたが戻って、データベースへの更新UL(sortable2)を投稿したい場合は、可能な解決策の一つがUL(sortable2)は、そのデータを使用すると、POSTメソッドを使用して提出することができますフォーム内でなければならないことです。今

li要素のいずれかは、UL(sortable2)にUL(sortable1)から移動させ、その後、入力型素子はまた、リスト要素と共に、UL(sortable2)に挿入あります"value"属性のは、と同じである必要があります。ulの要素は、ul(sortable1)のです。また、この入力要素のタイプはhiddenになります。

送信ボタンを使用してこのフォームを送信すると、すべてのデータがビューに戻ってきますので、それに応じてデータベースを変更することができます。

+0

"入力型要素も挿入されます。" - ul(sortable2)をフォームに登録するとすぐに自動的に挿入されるか、入力型を自分で追加する必要がありますか? –

+0

要素をul(sortable1)からul(sortable2)に移動するボタンをクリックすると、onClick関数を記述する必要があります。その関数では、divと入力型要素を作成し、その要素をjavascriptを使ってそのdivに追加する必要があります。 javascript - > https://github.com/amyth/hammer/blob/master/static/js/main.jsを使用して、入力フィールドまたは一般的なdivや要素をhtmlに追加する方法の例を参照してください populate関数と、input要素がdivにどのように追加され、どのようにプロパティと属性が設定されたかを参照してください。 –

関連する問題