ModelForm,覆盖抛出ValueError

时间:2014-03-05 17:55:49

标签: django

我基本上有这样的东西,

模型

class Survey(models.Model):
    aggbs_0 = models.PositiveSmallIntegerField(verbose_name='Has Tantrums.', blank=True)

表格

class SurveyForm(forms.ModelForm):
    nsf_CHOICES = (
        (1, 'Never',), 
        (2, '',),
        (3, 'Sometimes',),
        (4, '',),
        (5, 'Frequently',),
    ) 
    aggbs_0 = forms.ChoiceField(required=False, widget=forms.RadioSelect(renderer=HorizRadioRenderer), choices=nsf_CHOICES, label=Survey._meta.get_field_by_name('aggbs_0')[0].verbose_name)
    class Meta:
        model = Survey

视图

def survey_create(request):
    form = SurveyForm(request.POST or None)
    if form.is_valid():
        saved = form.save(commit=False)
        saved.save()
        messages.success(request, "submitted.")
    return render_to_response("reports/survey_form.html", 
                            locals(),
                            context_instance=RequestContext(request))

当我提交表格而没有填写我正在收到的单选按钮时,

invalid literal for int() with base 10: ''

如果他们没有填写单选按钮,我希望该值为0.

1 个答案:

答案 0 :(得分:2)

ChoiceField州的文件:

  
      
  • 空值:''(空字符串)
  •   
  • 规范化为:Unicode对象。
  •   

实际上,对于带有基数为10的int()的无效文字:''是在空字符串上调用int的结果。

您要使用的是TypedChoiceField

  
      
  • 空值:无论你给出empty_value
  •   
  • Normalizes to:coerce参数提供的类型值。
  •   

在您的情况下,您应该使用 TypedChoiceField ,就像使用 ChoiceField 一样,除了您还应该添加empty_value=0参数。