2012-05-09 62 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轉換爲MultipleChoiceField才能從__init__()的相關型號中進行選擇。使用標記(例如「all」)添加一個「全選」選項,而不是從實際模型中獲得的PK。然後只需在POST視圖中檢測到這一點並適當地設置。

3

這是在Django管理員或您自己的形式嗎?如果是管理員,最簡單的解決方案是簡單地將該字段添加到ModelAdmin.filter_horizontalModelAdmin.filter_vertical。 Django管理員將使用的特殊字段內置了「全選」選項。

如果是你自己的形式,JS是你最好的選擇@AdamKG建議。鑑於以下幾點:

<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'); 
});