2016-06-29 13 views
5

私の投稿要求のデータを処理するのにwtformsを使用しています。 1つの特定のポストリクエストはブール値を含むさまざまなデータを送信します。私のフォームはこのようになりますWTForms BooleanFieldはJSON false値をtrueとして扱います

class EditFileForm(Form): 
    title = StringField('title') 
    shared = BooleanField('shared') 
    fileID = IntegerField('fileID') 
    userID = IntegerField('userID') 

私は要求を受信したときにデータがこのようになっていることを見ることができます。

data = MultiDict(mapping=request.json) 
print(data) 
>>MultiDict([(u'shared', False), (u'title', u'File5'), (u'userID', 1), (u'fileID', 16)]) 

あなたはブール値フィールドが「偽」で見ることができ、実際のフォームフィールドを印刷すると、私は真実になります。

print(form.shared.raw_data) 
[False] 
print(form.shared.data) 
True 

偽のブール値を処理する方法がわからないことがあります。これを行う正しい方法は何ですか?代わりにIntegerFieldを使用していますか?

私は、私のpostgresデータベースから偽のブール値を処理しているブール値フィールドを持つ別のフォームを持っています。

答えて

8

WTFormsは実際にはJSONデータで動作するものではありません。この場合、BooleanFieldは受信した値がfield.false_valuesであることを確認します。デフォルトは('false', '')です。 Falseオブジェクトはそこにはないので、それは真だと考えられます。

false_valuesの別のセットをフィールドに渡すことができます。

BooleanField(false_values={False, 'false', ''}) 

フィールドを初めて使用する前に、これをどこかに配置して、すべてのインスタンスに対してパッチを適用してください。

BooleanField.false_values = {False, 'false', ''} 

あなたはJSONデータを処理するために、このようなMarshmallowとしてシリアライズライブラリを使用したほうが良いことがあります。

関連する問題