2017-03-25 9 views
1

Djangoの新機能で、フォームからユーザーから2つの数字を受け取り、それらを使っていくつかの操作を行う簡単なDjangoアプリケーションを開発しようとしています。結果をHttp Responseで出力します。私のコードは以下の通りです:私は私のローカルホスト上でこのコードを実行するとDjango: "フォームオブジェクトに属性がありません..."というエラーが発生しました

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' 
のようなエラーが発生します

forms.py

だから、何が問題なのですか?どうすれば私の "結果"機能でそれを使用するためにユーザー入力を得ることができますか?事前に

おかげで...

答えて

3

、あなたはform.dataを使用する必要があります。

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

通話resultform.is_valid()と呼ばれる場合は、cleaned_dataを使用することができます。

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

彼は ''でform_valid() '、そう'() '既にform.is_validを呼び出した'結果を()を呼び出す(OPはFormView.form_validを使用しているので、自動的に呼び出されます)。ここでは、 'cleaned_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']) 
関連する問題