Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单,表单始终无效_Python_Django_Forms - Fatal编程技术网

Python Django表单,表单始终无效

Python Django表单,表单始终无效,python,django,forms,Python,Django,Forms,是的,我看过其他对类似问题的回答。但我还没有找到一个对我有帮助的解决方案,我查看了所有当前可用的解决方案 我试图在文本框中输入一个名称,然后点击submit,这样我就可以创建一个新的项目列表(这些项目是不相关的) 但当我点击提交按钮时,什么也没发生。 在许多print语句之后,我推断原因是form.is\u valid()函数返回false if response.method == "POST": # returns a dictionary of informat

是的,我看过其他对类似问题的回答。但我还没有找到一个对我有帮助的解决方案,我查看了所有当前可用的解决方案

我试图在文本框中输入一个名称,然后点击submit,这样我就可以创建一个新的项目列表(这些项目是不相关的)

但当我点击提交按钮时,什么也没发生。 在许多print语句之后,我推断原因是
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)