2017-10-12 6 views
0

特定のモデルに属するいくつかの要素を選択する必要があります。私はデフォルトに「Ctrl +クリック」自分をDjangoのフォームの入力を、しかし、チェックボックスのテーブルを作成を使用したくありません。私は、ウィジェットを定義することによりModelMultipleChoiceFieldを隠すそのためカスタム入力のテンプレートでModelMultipleChoiceFieldを非表示にする

field = forms.ModelMultipleChoiceField(..., widget=forms.MultipleHiddenInput()) 

は、その後、次のように私はテンプレートにフォーム要素を追加します。

<form method="POST" class="locklist-form" id="locklist-form">{% csrf_token %} 
    {{ form.field }} 
</form> 

この段階で、私は選択を期待しますHTMLページに追加する-option要素(非表示に)、私は要素のオプションに達するとJavaScriptでそれらを修正することができるように。ただし、HTMLページには何も追加されません。

私は、フォームfiedsの他のタイプと、このアプローチを使用しています。 TextFieldのHTMLページには、次のように隠し要素があります。とは関係ないのはなぜですか?このフィールドの選択肢をJavascriptで変更するにはどうすればよいですか?

編集: MultipleHiddenInput renders only if with initial dataは同様の質問です。しかし、それを適用しても、期待される解決策には至りません。隠されたとして、この質問では、次のようにレンダリングすることが期待されます。 expected render しかしとして、私は、フォームのコンストラクタを変更MultipleHiddenInput renders only if with initial data、以下:

form = MyForm(initial={'field':MyModel.objects.all()}) 

レンダリング要素があり、次のように: render got

それを有用かもしれないが、期待されるものと正確には一致しない。私は、オブジェクトのリストの中から、いくつかのオプションを選択してマークする必要があります。

答えて

0

私はDjangoの能力に依存するのではなく、Javascriptを使って行っています。私はテンプレートに直接ModelMultipleChoiceFieldでフォームを追加(隠されていません)。ページがロードされたとき、私は、Javascriptのスクリプトを実行します。次のように隠されたクラスの

var field = document.getElementById('id_field'); 
selecter.setAttribute('class', 'hidden'); 

CSSの定義は次のとおりです。

.hidden{ 
    display: none; 
} 

これは、所望の状況に私を取得します。この時点で satisfied case

は、私はJavascriptを通過特定の項目を変更することができます。次のようにModelMultipleChoiceFieldが隠されレンダリングされる

document.getElementById('id_field').options[index].selected = boolValue; 
関連する問題