2016-06-19 7 views
0

フォームを使用して投稿リクエストからデータを取得していますが、私はよく慣れていない動作に気付きました。私は私のフォームの下に2つのバージョンがあります。唯一の違いは、フォームの2番目のバージョンでは、変数名にアンダースコアがあることです。アンダースコアのフォームフィールドは機能しません

class EditTitleForm(Form): 
    newTitle = StringField('newTitle') 
    currentTitle = StringField('currentTitle') 

class EditTitleForm(Form): 
    new_title = StringField('newTitle') 
    current_title = StringField('currentTitle') 
しかし

、私はprint(form.new_title.data)を試してみて、print(form.current_title.data)私は空行を取得しますが、私はアンダースコアなしのバージョンにフォームを切り替えると、すべてが正常に出力します。何故ですか?

@auth.route('/edit_title', methods=['POST']) 
def edit_title(): 
    data = MultiDict(mapping=request.json) 
    print(data) 
    form = EditTitleForm(data) 
    print(form.newTitle.data) 
    print(form.currentTitle.data) 
+0

これはWTFormsなのでしょうか? WTFormsの場合、アンダースコアフォームが機能するはずです(例:http://wtforms.readthedocs.io/en/latest/forms.html#defining-forms)。バグを報告する必要があります。 – jonrsharpe

+0

はいWTForms – Brosef

+0

JSONオブジェクトのキーも変更しましたか?ラベルを設定しても、各フィールドに読み込まれる内容には影響しません。興味深い。 – davidism

答えて

0

フィールドの名前は、読み取られるデータのキーに対応します。フィールド名を変更する場合は、JSONデータのキーも変更する必要があります。ラベル(フィールドへの最初の引数)を設定しても、これは影響しません。フィールドをHTMLとしてレンダリングする場合にのみ使用されます。

# if attribute name is new_title 
new_title = StringField() 

# then data key must be new_title as well 
data = { 
    "new_title": "Stack Overflow" 
} 

WTForms JSONと仕事が、あなたはそれに適し何かをしたい場合は、Marshmallowまたは別のシリアライズライブラリを試してみてください。

+0

キーとフィールドの名前の間に関係が存在するかどうかはわかりませんでした。ありがとうございました。 – Brosef

関連する問題