2012-05-09 51 views
1

ModelMultipleChoiceFieldに追加の選択肢を追加する方法はありますか?具体的には、すべての選択肢を個別に選択しなければならないエンドユーザーではなく、「すべて選択」オプションを追加したいと考えています。DJANGO:ModelMultipleChoiceFieldに「すべて選択」オプションを追加しますか?

現在のモデルフォーム:

class QueryForm(forms.Form): 
    book = forms.ModelMultipleChoiceField(queryset=Book.objects.all()) 

が、私はこのような何かをしたい:

class QueryForm(forms.Form): 
    book = forms.ModelMultipleChoiceField(choices=(('Select All', 'Select All'),(Book.objects.all())) 

にはどうすれば選択]複数選択フィールドをモデル化するためにすべてのオプションを追加することができますか?

+2

JavaScriptを使用して、このクライアント側の操作を行うことが容易であるかもしれません... – AdamKG

答えて

0

ModelMultipleChoiceField__init__()の関連モデルから選択するMultipleChoiceFieldに変換する必要があります。実際のモデルから取得するPKではなく、「すべて選択」オプションをセンチネル(「すべて」など)に追加します。次に、POSTビューでこれを検出し、適切に設定します。

3

これはDjangoの管理者または独自の形式ですか?それが管理者の場合、最も簡単な解決策は、ModelAdmin.filter_horizontalまたはModelAdmin.filter_verticalにフィールドを追加することです。 Django管理者が使用する特別なフィールドには、 "Choose All"オプションが組み込まれています。

自分のフォームの場合は、@AdamKGが推奨するJSが最善の策です。

<div class="field"> 
    <select multiple="multiple" name="my_field"> 
     <option value="something">Something</option> 
     ... 
    </select> 
    <a href="#" class="select-all">Select All</a> 
</div> 

はjQueryのこのビットはトリックを行う必要があります:次を考える

$('.select-all').click(function(){ 
    $('option', $(this).parent()).attr('selected', 'selected'); 
}); 
関連する問題