1

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()))

[すべて選択] オプションをモデルの複数選択フィールドに追加するにはどうすればよいですか?

4

2 に答える 2

4

これは 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');
});
于 2012-05-09T16:47:58.623 に答える
2

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

于 2012-05-09T16:28:07.923 に答える