我正在尝试使用自动完成下拉菜单替换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中每个表单的前缀,这就是为什么我'避免这样做。
答案 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;
}