Python Django表单,表单始终无效
是的,我看过其他对类似问题的回答。但我还没有找到一个对我有帮助的解决方案,我查看了所有当前可用的解决方案 我试图在文本框中输入一个名称,然后点击submit,这样我就可以创建一个新的项目列表(这些项目是不相关的) 但当我点击提交按钮时,什么也没发生。 在许多print语句之后,我推断原因是Python Django表单,表单始终无效,python,django,forms,Python,Django,Forms,是的,我看过其他对类似问题的回答。但我还没有找到一个对我有帮助的解决方案,我查看了所有当前可用的解决方案 我试图在文本框中输入一个名称,然后点击submit,这样我就可以创建一个新的项目列表(这些项目是不相关的) 但当我点击提交按钮时,什么也没发生。 在许多print语句之后,我推断原因是form.is\u valid()函数返回false if response.method == "POST": # returns a dictionary of informat
form.is\u valid()
函数返回false
if response.method == "POST":
# returns a dictionary of information in the form
form = CreateNewList(response.POST)
print(form.errors)
# if the form is valid, get the name attribute and create a new ToDoList with it
if form.is_valid():
n = form.cleaned_data["name"]
t = ToDoList(name=n)
t.save()
return HttpResponseRedirect("/%i" % t.id)
else:
form = CreateNewList()
return render(response, "main/create.html", {"form": form})
在阅读了我在网上找到的一些帖子后,我采取的下一步是使用表单打印错误
这是我从那张打印出来的
<ul class="errorlist"><li>check<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
要开始解决此问题,应执行以下操作:
- 将
response.method
替换为request.method
。这是因为您希望视图知道请求的内容
方法,而不是响应的
- 将
response.POST
替换为request.POST
。这是因为您希望从以前的POST
请求中填充数据
回到主题,您的布尔字段被标记为必填字段(required=True
),这就是为什么在未选中相关复选框的情况下无法通过验证。如果希望复选框在默认情况下被选中(在第一次GET
请求时)而不是必需的,请使用initial=True
而不是required=True
阅读更多信息。我得到了我想要的结果,但我不知道如何得到。以下是事件链:
Dawid Mszanowski建议我将required的值更改为False,并将initial设置为true,如下所示
check = forms.BooleanField(label="Completed", initial=True)
我早些时候试过,但仍然有错误,没有成功,但我保留了更改
然后我实现了MarkWalker的建议,通过在我的用户界面中实现复选框并允许用户手动勾选,这实际上解决了问题,我得到了我想要的。然后我恢复了Dawid建议我做的所有更改,我的程序仍在按预期运行,所以看起来好像Marks解决方案修复了所有问题。但是我不喜欢用户手动点击复选框的方式,所以我把它去掉了。在这一点上我几乎回到了原点,对吗?我回复了Dawid建议的更改和Mark建议的更改。现在由于某种原因,我的程序决定工作。不知道发生了什么,但是,嘿,谢谢大家,我真的很感激听起来你没有在模板中包含检查
字段?它没有得到它必须具有的检查
字段的真
值,因此它给出了这个错误。确保显示检查
字段,并确保它得到一个真
值,那么错误就会消失。@markwalker\u您的解决方案对我有效,然后我删除它只是为了看看会发生什么。然后它继续工作,哈哈。不确定这里到底发生了什么,但我在下面留下了一个更详细的事件链。非常感谢您,RegardLessResponse没有方法,并且响应没有传递给view函数。他只是将视图函数参数命名或翻译错误,但它不会通过重命名来修复任何问题。
check = forms.BooleanField(label="Completed", initial=True)