当我提交空的无线电输入时,我遇到了一个问题。如果我选择一个选项,表单功能正常;但是,如果我将其留空,我会收到以下错误 -
MultiValueDictKeyError at /
Key 'like' not found in <QueryDict:...
我尝试了几种解决方案,包括在提到的字段'喜欢'上使用dict.get并删除数据库中的列 - 这似乎是表单模块中的一个问题。
这是我的代码:
在forms.py -
中from django import forms
class PictureForm(forms.Form):
like = forms.ChoiceField(widget=forms.RadioSelect(), choices=(
[('yes','yes'), ('no','no'),]),)
name = forms.CharField()
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
并在views.py
中def index2(request):
if request.method == 'POST':
form = PictureForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
Picture.objects.create(like=cd['like'], name=cd['name'], email=cd['email'], message=cd['message'])
return HttpResponseRedirect ('/thanks/')
else:
form = PictureForm()
return render_to_response('index2.html', {'form':form}, context_instance=RequestContext(request))
我想拥有它,所以当收音机提交空白时显然没有错误 - 和
1)如何允许空白提交,
2)如何提示错误信息。
此外,验证不适用于此表单(我之前的教程已完成,这是第一次验证不能自动运行)。
谢谢。
答案 0 :(得分:3)
您的图片模型是什么样的?您的模型是否对多列的唯一性有任何限制?看起来您正在使用表单创建模型,您是否阅读了ModelForm上的文档?
您的表单可以简化为:
from django.forms import ModelForm
class PictureForm(ModelForm):
like = forms.ChoiceField(widget=forms.RadioSelect(), choices=(
[('yes','yes'), ('no','no'),]),)
class Meta:
model = Picture
在您看来:
if form.is_valid():
form.save()
答案 1 :(得分:3)
Picture.objects.create(like=cd['like'], [...])
您正尝试使用不存在的密钥访问 cd 字典,因为该字段没有值。
尝试输入 if / else 语句:
if like in cd:
Picture.objects.create(like=cd['like'], [...])
此外,目前尚不清楚你是否正在使用Thierry建议的ModelForm,但如果是这样,你可能需要在模型字段创建中添加参数 blank = True,null = True ,为了允许空值。