2016-04-13 2 views
1

にFORMFIELD wtformsからデータを取得し、私は問題のルートフラスコルート

forms.py

class Calculator(Form): 
    amount = IntegerField('Amount') 
    weight = IntegerField('Weight') 

class Program(Form): 
    cycles = IntegerField('Cycles') 
    volume = FormField(Calculator) 

app.pyでそれを使用してフォームからデータを取得してい

@app.route('/', methods=('GET', 'POST')) 
def index(): 
    form = forms.Program() 
    if form.validate_on_submit(): 
     values = models.Progression(
      cycles=form.cycles.data, 
      amount=form.amount.data, 
      weight=form.weight.data 
     ) 
    return render_template('index.html', form=form, values=values) 

cyclesのデータはうまくいきますが、私のルート内でカプセル化されたフォームへのアクセス方法についてはわかりません。ドキュメントはFormFieldは、囲まれたフォームのデータdictを返すと言うが、私はそれをつかむ方法を把握することはできませんし、変数に配置することはできません。

+0

あなたの問題は何ですか?具体的にする。 –

+0

申し訳ありませんが、私は質問を終える前に間違って投稿しました。 – gscr

答えて

0

私は私が本当の問題

amount=form.volume.amount.data, 
    weight=form.volume.weight.data 

を使用して必要なデータをつかむことができたが、私はFormFieldを使用していたときに、フォームが検証を行っていなかったという事実から来ました。ルーキーエラー私は以前チェックしていたはずです。 私はCSRF保護をflask_wtfからインポートして使用する必要がありましたCsrfProtect(app)

0

問題は、フォームデータがCalculatorクラスの属性として渡らないということです。データはvolume属性から辞書として送信されます。

テストも実施して:print form.volume.data

(私はあなたのvaluesオブジェクトをコメントアウト示唆し、ちょうどprint文を使用)

出力は次のようになります。私に何かを教えるための{'amount': foo, 'weight': bar}

ありがとう!私は決してFormFieldのことを知りませんでした。

+0

そのテストのヒントありがとう。それは私の問題の本当の原因に私を導くものです。 – gscr

+0

私の答えはあなたに役立ってうれしいです.. – wgwz