Django:“表单对象没有属性......”错误

时间:2017-03-25 09:34:05

标签: python django django-forms django-views

我是Django的新手,我正在尝试开发一个简单的Django应用程序,该应用程序从用户处获取两个带有表单的数字,并使用这些数字执行一些操作并使用Http Response打印结果。我的代码如下:

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())

但是,当我在localhost上运行此代码时,会出现类似

的错误
SimpleForm object has no attribute 'a'

那么,问题可能是什么?如何获取用户输入以便在我的“结果”功能中使用它?

提前致谢...

2 个答案:

答案 0 :(得分:4)

要访问数据,您需要使用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'])

答案 1 :(得分:1)

form.aIntergerField(),而不是结果。您需要阅读表单的cleaned_data dict才能访问表单字段的值。 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'])