2014-01-07 336 views
0

我試圖找到一個優雅的解決方案,而不求助於使用JQuery或JS。無論如何,人們可以在模型中選擇所有選項嗎?選擇Django中的所有複選框

我不那麼熱衷於使用:django checkbox select all

我已經看到了暗示:https://groups.google.com/forum/#!topic/django-users/dzdiZ9TLR5g

但始終無法找到任何東西,很容易讓我從提供全選直接Django的。有誰知道這是否可以打開?或者JS是執行此操作的唯一方法?

我注意到這個答案早些時候:select all rows in django_tables2

但是,有沒有辦法避免這種做法,因爲我可能不知道什麼原因字段 - 因此,如果我有每個頁面上的多個領域 - 即多個名稱。

回答

1

您在Django中編寫的任何解決方案都將涉及重寫小部件呈現以輸出包含javascript/jquery的html。我不認爲有任何進展。

編輯:爲了回答你的評論,我個人這樣做的方式是創建一個SlaveCheckboxWidget,它可以做一些簡單的繼承標準複選框小部件,但將css類名改爲「slave-checkbox」或類似的,然後有一個MasterCheckboxWidget,其中包含一些jQuery來選擇所有(".slave-checkbox")並切換它們。

更多關於自定義Django的部件here

+0

謝謝 - 你知道有什麼好的解決辦法,處理每個窗體上的多個領域? – disruptive

1

這裏是我的簡單的解決方案多種形式和多個字段:

 {% for form in formset %} 

    <div> 
     {% for field in form %} 

     {{ field }} 

     {% for check in field|slice:":1" %} 
     <input type="checkbox" onClick="toggle(this,'{{ check.name }}')"/> 
     Select All 
     {% endfor %} 
     {% endfor %} 
    </div> 

    {% endfor %} 

一個字段的每個複選框有相同的名稱 - 因此JS可以使用它。 請注意,此示例窗體中的所有字段都是複選框。

JS代碼:

<script type="text/javascript" > 
function toggle(source,name) { 
    checkboxes = document.getElementsByName(name); 
    for (var i = 0, 
     n = checkboxes.length; i < n; i++) { 
     checkboxes[i].checked = source.checked; 
    } 
} 
</script> 

我擴展了這個解決方案的Django: How to implement "select all" check box in HTML?