2016-06-19 6 views
0

Ich benutze ein Formular, um die Daten von einer Postanforderung zu erhalten, und ich bemerkte etwas Verhalten, das ich nicht kenne. Ich habe zwei Versionen meines Formulars unten gezeigt. Die einzige Variante ist, dass ich in der zweiten Version des Formulars einen Unterstrich in meinen Variablennamen habe.Formularfeld mit Unterstrich funktioniert nicht

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

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

aber wenn ich versuche, print(form.new_title.data) und print(form.current_title.data) erhalte ich eine leere Zeile, aber wenn ich die Form auf die Version ohne den Unterstrichen wechseln, alles druckt gut. Warum das?

@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

Ist das WTForms oder etwas anderes? Wenn es WTForms ist, sollte das Unterstreichungsformular funktionieren (siehe zum Beispiel http://wtforms.readthedocs.io/en/latest/forms.html#defining-forms) und Sie sollten einen Fehler melden. – jonrsharpe

+0

Ja, es ist WTForms – Brosef

+0

Haben Sie auch die Schlüssel im JSON-Objekt geändert? Das Festlegen der Beschriftungen hat keinen Einfluss darauf, was in jedes Feld geladen wird. – davidism

Antwort

0

Die Namen der Felder entsprechen den Schlüssel in den Daten gelesen werden. Wenn Sie die Feldnamen ändern, müssen Sie auch die Schlüssel in den JSON-Daten ändern. Das Festlegen des Labels (das erste Argument für ein Feld) wirkt sich nicht darauf aus, das wird nur beim Rendern der Felder als HTML verwendet.

# if attribute name is new_title 
new_title = StringField() 

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

WTForms kann Arbeit mit JSON, aber wenn man etwas mehr auf, dass wollen, versuchen Sie Marshmallow oder eine andere Serialisierung Bibliothek.

+0

Interessant. Ich wusste nicht, dass diese Beziehung zwischen den Schlüssel- und Feldnamen bestand. Vielen Dank. – Brosef