在django中,我有动态禁用复选框的代码,因为取消选中它会触发一些对象删除。如果不应删除我的对象,则复选框将显示为已禁用,并且未提交。
但是,在视图中,我无法区分提交的复选框为false和未提交的复选框,因为form.cleaned_data仍包含密钥“is_user”。
forms.py
if somecondition:
self.fields["is_user"].widget.attrs['disabled'] = True
views.py
if "is_user" in form.cleaned_data:
if form.cleaned_data["is_user"] == False:
do dangerous deleting
return redirect(page)
elif form.cleaned_data["is_user"] == True:
process information
return redirect(page)
else:
return redirect(page)
我从复选框禁用状态提交表单,在pdb shell中我可以输入:
(pdb) form.cleaned_data
{'is_user': False}
我原本以为form.cleaned_data不包含非提交字段的密钥。我如何检测它是否未提交,而不是提交未选中?
答案 0 :(得分:4)
未选中的复选框与未提交的复选框之间的HTML没有区别。简而言之,如果您取消选中一个复选框,它就不会包含在POST中。这与Django无关,而是浏览器的工作方式。
如果您确实需要区分这些状态,则需要一个不同的控件:可能是is_user
的一组带有true
和false
值的单选按钮。或者,如果你必须有一个复选框,也许你可以使用一些Javascript在未选中时设置一个隐藏的控件。
在任何情况下,拥有删除的代码,除非选中一个复选框,这绝对是错误的方法。操作应始终默认为破坏性最小:执行删除等操作需要采取积极行动。