代码之家  ›  专栏  ›  技术社区  ›  creyD Ratha Pech

为什么CheckboxInput在未选中时不返回任何内容?

  •  1
  • creyD Ratha Pech  · 技术社区  · 6 年前

    我有一张带有 checkbox = forms.BooleanField(required=False) 在我看来,我试图通过以下方式实现这一点:

    if request.POST['checkbox'] == True:
        # DO SOMETHING
    else:
        # DO SOMETHING ELSE
    

    选中复选框时,一切正常,但如果没有,则返回错误消息 MultiValueDictKeyError at /theForm/ Django Documentation 因为这个元素说它应该返回 False .

    规格化为:Python True或False值。

    try: except: -函数,因为这是不应该抛出错误的!

    1 回复  |  直到 6 年前
        1
  •  1
  •   willeM_ Van Onsem    6 年前

    似乎如果复选框没有被选中,它就不会返回任何东西,即使Django文档对此元素说它应该返回 False

    就是这样 ,但在这里你可以 使用 Form ,你和 POST . Django的状态对此没有太大的控制力。虽然Django 形式 s罐 生成 那个 . 您可以将其视为Django中的一个概念层,它有助于构建表单,以及解析从HTTP请求中产生的数据 起源 阻抗 “在两者之间。

    通常在复选框 选中时,名称(和值)不可用 not ship with the POST data . 这由w3.org指定为:

    复选框(和单选按钮)是用户可以切换的开/关开关。当控制元素的checked属性被设置时,开关为“on”。提交表格时,仅 .

    成功的控件对于提交是“有效”的。 . 成功的控件必须在窗体元素中定义,并且必须具有控件名称。

    因此,您可以按以下方式执行检查:

    if 'checkbox' in request.POST:
        # DO SOMETHING
    else:
        # DO SOMETHING ELSE

    或者,一种更优雅、更安全的方法是让Django表单完成工作,比如:

    form = MyForm(request.POST)
    if form.is_valid():
        if form.cleaned_data['checkbox']:
            # DO SOMETHING
        else:
            # DO SOMETHING ELSE

    但是,在某些情况下,表单可能是无效的(例如,缺少必需的字段,或者 <select> 框中包含无效数据等,因此您也必须找到处理此类情况的方法。