Nik*_*las 12 django django-forms
我对Django很新,我正在使用Django 1.0.我有这个:
forms.py:
class MyForm(forms.Form):
extra_cheeze = forms.BooleanField(required=False,
initial=False,
label='Extra cheeze')
Run Code Online (Sandbox Code Playgroud)
views.py:
def order_something(request):
form = MyForm(request.POST or None)
if request.method == 'POST' and form.is_valid():
# do stuff...
Run Code Online (Sandbox Code Playgroud)
问题是除非选中复选框,否则表单无效,因此似乎没有办法从字段中获取False值.据我所知,从文档来看,它应该有效.如果我在表单中添加一个CharField,它就有效...
我在这里误解了什么,或者这是一个错误?(是的,我用Google搜索但没有发现任何相关内容)
更新:正如@Dominic Rodger所建议的,我尝试添加一个隐藏字段
dummy = forms.CharField(initial='dummy', widget=forms.widgets.HiddenInput())
,这使得表单有效.这种解决方法使我现在可以继续前进,但知道我是否误解了某些内容仍然很有趣......
Nik*_*las 10
我的问题中的代码中有一个错误.感谢@ d0ugal通过包含一个稍微不同的例子帮助我发现它.问题出在这里:
form = MyForm(request.POST or None) # <- PROBLEM HERE!!!!!!!!!!!!!!!!
if request.method == 'POST' and form.is_valid():
# do stuff...
Run Code Online (Sandbox Code Playgroud)
错误是我假设request.POST如果它是一个帖子将评估为True.但是由于浏览器没有为未选中的复选框发布任何内容,并且这是唯一的字段,因此POST数据是一个空字典,其计算结果为False.这导致None用作初始化数据,导致表单未绑定且无效.
@ d0ugal的例子做了安全的事情并首先测试request.method.
| 归档时间: |
|
| 查看次数: |
19703 次 |
| 最近记录: |