2016-06-29 8 views
5

Ich verwende wtforms, um Daten aus meinen Postanforderungen zu behandeln. Eine bestimmte Post-Anforderungen sendet eine Vielzahl von Daten einschließlich eines booleschen Werts.WTForms BooleanField behandelt JSON false value als true

sieht Meine Form wie folgt aus:

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

das sehe ich, wenn ich die Anforderung der Daten sieht wie folgt erhalten:

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

Sie die Boolesche Feld „false“ zu sehen ist, und das Drucken der Rohdaten zeigt das auch. Wenn ich jedoch das tatsächliche Formularfeld drucke, werde ich wahr.

Ich habe gelesen, dass WTForms möglicherweise nicht mit falschen booleschen Werten umgehen können. Was ist der richtige Weg, dies zu tun? Verwenden Sie stattdessen eine IntegerField?

Ich habe ein anderes Formular mit einem booleanfield, das falsche boolesche Werte aus meiner Postgres-Datenbank behandelt, ganz gut.

Antwort

8

WTForms ist nicht wirklich für die Arbeit mit JSON-Daten gedacht. In diesem Fall überprüft BooleanField, dass der empfangene Wert in field.false_values ist, standardmäßig ('false', ''). Das Objekt False ist nicht da, also gilt es als wahr.

Sie können einen anderen Satz von false_values an das Feld übergeben.

Oder patchen Sie es für alle Instanzen, indem Sie diese irgendwo platzieren, bevor das Feld zum ersten Mal verwendet wird. unter Verwendung einer Serialisierung Bibliothek wie Marshmallow zu JSON-Daten verarbeiten off

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

Sie besser können.