gpt4 book ai didi

除非经过检查,否则带有 BooleanField 的 Django 表单总是无效的

转载 作者:行者123 更新时间:2023-11-28 19:34:37 24 4
gpt4 key购买 nike

我有一个使用以下形式的应用程序:

class ConfirmForm(forms.Form):
account_name = forms.CharField(widget=forms.HiddenInput)
up_to_date = forms.BooleanField(initial=True)

我使用以下模板摘录中的表单:

<form class="confirmform" action="/foo/" enctype="multipart/form-data" method="post">
{{ confirm_form.up_to_date }} Check if this data brings the account up to date.<br>
{{ confirm_form.account_name }} <input type="submit" name="confirm" value="Confirm" />
</form>

我的 View 使用以下基本代码结构:

if request.method == 'POST':
#check for 'confirm' because I actually have multiple forms in this page
if 'confirm' in request.POST:
confirm_form = ConfirmForm(request.POST)
if confirm_form.is_valid():
#do stuff
else:
c['confirm_form'] = confirm_form
else:
c['confirm_form'] = ConfirmForm({'account_name':'provided_value'})

有两点是错误的:

1) 即使我设置了 initial=True,页面加载时该复选框仍未选中

2) 除非我选中复选框,否则表单总是无效的。它仅给出 up_to_date 的错误:“此字段是必需的。”

我已阅读 this similar question但他的解决方案不适用于我的项目。

那么……这是怎么回事?

编辑:

我更新了上面的代码以更忠实于我的实际代码。

问题 #1 是我的错,因为我在实例化表单时通过绑定(bind)数据覆盖了初始值。

问题#2 我还在考虑一个问题。在 up_to_date 上使用 required=False 将解决问题,但是使用默认小部件似乎不正确,BooleanField 可以是NULL(导致有效性检查失败)或 True 但永远不会 False

最佳答案

在 Django 表单中, bool 字段必须使用 required=False 创建。

当复选框未选中时,浏览器不会在请求的 POST 参数中发送该字段。如果不指定该字段是可选的,当它不在 POST 参数中时,Django 会将其视为缺失字段。

恕我直言,如果 Django 对 bool 表单字段默认具有此行为就好了。

(Yuji 已经在评论中回答了这个问题,但作为答案会很有用)

关于除非经过检查,否则带有 BooleanField 的 Django 表单总是无效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com