django - 表单中的 django 布尔值始终返回 true
问题描述
学习 django,并尝试制作待办事项列表。
首先创建一个只有 task.name 的任务。然后我转到 taskdetail.html,其中包含 task.detail、task.duedate 和 task.done 的表单。后者是一个布尔值,如果任务完成则为真。我的模板中有以下内容:
<input type="hidden" name="done" value=0 />
<input type="checkbox" name="done" value=1 {% if task.done %} checked {% endif %}>
在我的views.py中,我有:
def taskdetail(request, task_id):
task = Task.objects.get(pk=task_id)
if request.method == 'POST':
form = DetailTaskForm(request.POST)
if form.is_valid():
task.name = form.cleaned_data["name"]
task.description = form.cleaned_data["description"]
task.done = form.cleaned_data["done"]
task.duedate = form.cleaned_data["duedate"]
task.save()
...
奇怪的是,task.done 总是以正确的方式结束。默认是假的,在task.done = form.cleaned_data["done"]之前我已经验证确实是假的
我在某处读到 value=0 与 false 相同,但这似乎对我不起作用。我也试过
<input type="hidden" name="done" value="" />
但后来我的 form.is_valid 返回 false。
这里可能是什么问题?(我正在使用 Django 2.1 和 python 3.7)
EDIT1:威廉的回答让我走上了正轨,但我的问题还没有完全解决。我现在将 task.done 默认设置为 False,并使其不是必填字段。我将模板更改为:
<input type="hidden" name="done" value="" />
<input type="checkbox" name="done" value=1 {% if task.done %} checked {% endif %}>
{% if task.done %}
<input type="hidden" name="done" value="on" />
{% endif %}
我发送到表单的 {{task.done}} 是 False,我看不到如何在表单中对其进行操作并将其设置为 True。(仅在发布后)因此,我应该能够检查复选框是否已被勾选,而不是检查 task.done == True。
解决方案
推荐阅读
- java - 我无法在 recyclerview 上显示浮动操作菜单
- r - R中的奇偶一致性
- laravel - Laravel 5.x 和 7.x 认证中间件的区别
- javascript - 图像数组 ReactJs 响应式轮播
- sql-server - SQL CLR 中的 .Net Core 程序集
- scheme - 评估复合程序元循环“应用”的顺序
- apache-nifi - 在“ExtractText”调用的 Nifi 处理器“InvokeHttp”中,您在哪里编写 POST 请求的正文
- android - 调试 espresso 测试在“实例化测试...”处挂起并出现 Object.wait 错误
- python - Python (cpython) 在内存屏障和原子性等方面的行为是否得到保证?
- vue.js - 在 Vue 中观察数组的添加/删除