2017-03-25 77 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']) 
相关问题