如何知道是否仅选中{{form.checkbox}} form-tag复选框

时间:2009-10-09 21:25:34

标签: django django-templates

我如何知道是否选中了复选框(True,1)只有{{form.checkbox}} form-tag?

'activo'在db。中定义为(True,1)。

我的模板是:

{{ form.activo }}
RESULTS:
<input id="id_activo" type="checkbox" name="activo" checked="checked"/>

{{ form.activo.data }}
RESULTS:
False

{{ form.activo.value }}
RESULTS:
""

然而,没有1或者真的是通过。 :S

任何提示都表示赞赏。 =')

3 个答案:

答案 0 :(得分:1)

当使用request.POST初始化时,检查request.POST.has_key('activo')或{{form.activo.data}}是否实际返回True。

你的问题不是很清楚,但也许你的问题与事实有关,即浏览器不会在POST数据中放入任何未经检查的复选框。

当我不得不区分一个完全没有显示的复选框和一个未被选中的显示复选框时,这让我很复杂。只是从查看POST数据,您无法区分这两种情况。

答案 1 :(得分:1)

在回复mbarkhau的回答之后,使用instance=不会使表单绑定,它只是为表单提供默认值。

这是模板中的逻辑:

{% if form.is_bound %}
    {% if form.initial.activo %}
         Checked.
    {% else %}
         Not checked.
    {% endif %}
{% else %}
    {% if form.activo.data %}
         Checked.
    {% else %}
         Not checked
    {% endif %}
{% endif %}

但是在视图中执行此逻辑并传递额外的上下文更有意义。类似的东西:

context_data = {...}
if form.is_bound:
    activo = form.data.get('activo')
else:
    activo = form.initial.get('activo')
context_data['activo'] = bool(activo)
return render_to_response('your_template.html', context_data)

答案 2 :(得分:0)

如果你想在模板中使用布尔条件,这应该可行:

{% if form.activo %}
--
{% else %}
---
{% endif %}