django 如果未选择任何选项,则具有ModelChoiceField(required=True)得窗体不会引发ValidationError

new9mtju  于 2022-12-01  发布在  Go
关注(0)|答案(3)|浏览(98)

我有一个表单,如果所有字段都无效,则会引发ValidationErrors。但是,如果没有从ModelChoiceField中选择任何选项,则该表单既不会提交(这很好),也不会在模板中引发任何ValidationError
如果在提交时没有选择类别,if request.method == 'POST':似乎返回False
第一个
...呈现:
第一个

bmvo0sr5

bmvo0sr51#

如果在提交时没有选择类别,if request.method == 'POST':似乎返回False
浏览器甚至不发送请求,因为HTML5验证失败。
由于input上存在visibility: hidden,因此未显示验证消息。

.category-wrapper input {
    position: fixed;
    visibility: hidden;
}

...导致在浏览器控制台中显示此错误:
name='category'的无效窗体控件无法获得焦点。
相反,应使其透明、无宽度和无边距:

.category-wrapper input {
    margin: 0;
    opacity: 0;
    width: 0;
}
vh0rcniy

vh0rcniy2#

这是因为视图传递了第一个if

if request.method == 'POST':

创建表单

# create a form instance and populate it with data from the request:
    form = PollersForm(request.POST)

然后检查它是否有效

# check whether it's valid:
    if form.is_valid():

由于它是无效的,视图返回到第一个缩进,并呈现包含内部错误的表单的模板。

else:
    form = PollersForm()

return render(request, 'pollinator/raise_poller.html', {'form': form})

最好的办法是从else中取出request.method的干净形式

form = PollersForm()

return render(request, 'pollinator/raise_poller.html', {'form': form})
cunj1qz1

cunj1qz13#

必需= true
仅检查字段中是否有内容
由此
是否可以在响应数据中检查该字段是否有默认值?

相关问题