2014-01-07 225 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?