2014-03-05 41 views
1

我已經基本上得到了這樣的事情,的ModelForm與覆蓋拋出ValueError異常

模型

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,如果他們不填寫一個單選按鈕。

+0

當用戶沒有選擇按鈕時,你希望它有什麼價值? –

+0

如果能夠節省一個零,我會很高興。我試圖覆蓋保存功能。 – broinjc

回答

2

ChoiceField狀態的文檔:

  • 空值:''(空字符串)
  • 規一化到:一個Unicode對象。

事實上,無效字面對於int()與基體10: ''是上一個空字符串調用int的結果。

要使用什麼是TypedChoiceField

  • 空值:無論你給出empty_value
  • 規一到:由coerce參數提供的類型的值。

在你的情況,你應該使用TypedChoiceField你使用ChoiceField以同樣的方式,但您也應該添加empty_value=0參數。

+0

優秀的答案。謝謝。這正是我需要的。 – broinjc