访问Django模板中的CheckBoxMultiple选定项

时间:2015-01-04 22:21:53

标签: jquery html django forms

我正在尝试使用自动完成下拉菜单替换CheckBoxSelectMultiple字段。选择自动填充项目后,隐藏的输入将附加到div中,并且选择项目的值,因此在提交表单后,它看起来与复选框字段相同。

然而,问题是当表单中存在错误时还原这些列表项。理想情况下,我可以创建一个从CheckBoxSelectMultiple小部件继承的自定义小部件,但似乎没有任何关于如何执行此操作的文档。相反,我认为我可以采取类似以下的东西:

{% for box in checkboxes.selected %}
<li>
<span class="selectedItem">
    {{ box.field1 }} ({{box.field2}})
    <input type="hidden" value="{{box.id}}" name="selectedItems"/>
</span>
</li>

{% endfor %}

对于一个必须相当常见的问题,这是一个非常糟糕的解决方案。我想有一种相当优雅的解决方法,我没有在这里看到。 我应该添加这也将在一个formset中,所以如果我正在修改视图,我需要捕获formset中每个表单的前缀,这就是为什么我'避免这样做。

1 个答案:

答案 0 :(得分:0)

问题在于您输入的name,因此此行可能存在错误:

<input type="hidden" value="{{box.id}}" name="<<Name of the widget here>>"/>

如果该名称不正确,Django将无法正确接收这些值,这包括任何formset前缀。

但是,更简单的解决方案是按原样呈现HTML,然后适当地设置样式。例如,您可以将实际的复选框放在屏幕上,然后使用颜色高亮显示检查的内容以及不喜欢的内容:

input[type="checkbox"] {
  position: absolute;
  left: -9999px;
}
[type="checkbox"]:checked + label {
  color:red;
}
[type="checkbox"]:not(:checked) + label {
  color:blue;
}