django ChoiceField中的问题

时间:2011-05-08 03:23:30

标签: django django-forms

当我提交空的无线电输入时,我遇到了一个问题。如果我选择一个选项,表单功能正常;但是,如果我将其留空,我会收到以下错误 -

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)如何提示错误信息。

此外,验证不适用于此表单(我之前的教程已完成,这是第一次验证不能自动运行)。

谢谢。

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 ,为了允许空值。