Ich habe Probleme, ein Formular mit einem Wörterbuch zu füllen:
%Vor%fügt keine Daten in form ein (d. h. form.vorname.data = Keine nach dem vorhergehenden).
Der Anfang der Formulardefinition wird unten angezeigt. Ich weiß nicht, was ich als nächstes versuchen soll. Die Formulardokumentation sagt nur:
%Vor%obj - Wenn formdata leer oder nicht angegeben ist, wird dieses Objekt auf Attribute geprüft, die mit Feldnamen übereinstimmen, die für Feldwerte verwendet werden.
Das Problem ist, dass die WTForms nur getattr
verwenden Überprüfen Sie, ob der Feldname in obj
vorhanden ist (es wird nicht versucht, __getitem__
aufzurufen). Sie können anstelle eines Wörterbuchs ein namedtuple
verwenden oder Ihre Daten weitergeben als Schlüsselwortargumente ( form = RolodexEntry(**row)
).
Diese Antwort wurde der Vollständigkeit halber aufgenommen. Wie von Sean Vieira aufgezeigt, verwendet WTForms getattr
, um Attributnamen zu erhalten, was bei Wörterbüchern nicht funktioniert. Verwenden der akzeptierten Antwort von
Python-Diktat in Objekt konvertieren?
Das funktioniert auch:
%Vor% Obwohl diese Frage vor einiger Zeit gestellt wurde, schlage ich vor, Sean Vieiras Antwort auf ein Duplikat dieser Frage zu sehen. Wie in seiner Antwort erklärt, wird jede Klasse mit einer Schnittstelle, die getlist
enthält, vom Konstruktor wtforms.Form
akzeptiert.
Als ich flask_wtf benutzt habe, habe ich festgestellt, dass Flasks Formularklasse mich verpfuscht hat. Ich denke, das war das gleiche Problem von @ wgwz's Kommentar zu @ pgoetz's Antwort. Das Flask-Formular füllt automatisch Formulardaten mit Daten aus der Anfrage. Da mein "RolodexEntry" ein in ein größeres Formular eingebettetes FormField war, waren die automatisch aufgefüllten Formulardaten ungültig. Um zu versuchen, dies zu beheben, habe ich die Form von Wtforms subklassifiziert, anstatt Flasks Form zu unterklassifizieren.
Tags und Links wtforms