2017-03-25 57 views
1

我是Django中的新成員,我試圖開發一個簡單的Django應用程序,它從用戶獲取兩個數字並與表單進行一些操作數字並用Http Response打印結果。我的代碼如下:Django:「表單對象沒有屬性...」錯誤

forms.py

class SimpleForm(forms.ModelForm): 

    a = forms.IntegerField(label='first') 
    b = forms.IntegerField(label='second') 

    def result(self): 
     return doSomething(self.a, self.b) 

views.py

class MainPage(FormView): 
    template_name = 'simple.html' 
    success_url = '/result/' 
    form_class = SimpleForm 

    def form_valid(self, form): 
     return HttpResponse(form.result()) 

然而,當我跑在我的本地這段代碼,它給像

SimpleForm object has no attribute 'a' 
錯誤

那麼,會有什麼問題?如何獲得用戶輸入以便在我的「結果」函數中使用它?

在此先感謝...

回答

3

訪問數據,您需要使用form.data

def result(self): 
    return doSomething(self.data['a'], self.data['b']) 

如果你叫form.is_valid()電話result之前,你也可以使用cleaned_data。 (因爲OP採用FormView.form_valid,它被自動調用)

def result(self): 
    return doSomething(self.cleaned_data['a'], self.cleaned_data['b']) 
+0

他打電話'結果()''中form_valid()',所以'form.is_valid()'已經打電話。這裏最好只使用'cleared_data'確定數據驗證,不可以? – Wilfried

+0

@Wilfried,你是對的。我錯過了。我會提到的。感謝您的評論。 – falsetru

+0

self.data和self.cleaned_data有什麼區別?我的意思是我應該選擇哪一個? – qwerty

1

form.aIntergerField(),而不是結果。您需要閱讀您的表單的cleaned_data字典才能訪問您的表單字段的值。 Cleaned_data documentation

class SimpleForm(forms.ModelForm): 

    a = forms.IntegerField(label='first') 
    b = forms.IntegerField(label='second') 

    def result(self): 
     return doSomething(self.cleaned_data['a'], self.cleaned_data['b']) 
相關問題