2011-05-08 56 views
2

我在提交空的无线电输入时遇到了问题。如果我选择一个选项,表单功能正常;但是,如果我留空白,我碰到下面的错误 -django ChoiceField中的问题

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

我认为这个类似问题的答案会帮助你出来 :http://stackoverflow.com/q/5895588/1037459 – 2011-11-09 10:58:54

回答

3
Picture.objects.create(like=cd['like'], [...]) 

您试图访问CD字典中不存在的关键,因为该领域没有价值。

尝试把在的if/else声明:

if like in cd: 
    Picture.objects.create(like=cd['like'], [...]) 

而且,目前还不清楚,如果你正在使用的ModelForm作为亨利的建议,但如果是这样,你可能需要添加参数blank = True,null = True添加到您的Model字段创建中,以允许空值。

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()