Es fehlt wirklich an Dokumentation darüber, wie man mit der Feldliste von WTForms arbeitet. So dank dem Internet Ich habe in der Lage zusammen folgendes zu hacken:Wie können Sie eine WTForms-Feldliste nach dem validate_on_submit() - Block auffüllen?
Form:
class BranchForm(Form):
name = StringField('Name', validators = [Required()])
equipment = FieldList(SelectField('Equipment', validators=[Required()], coerce=int,
choices = [(x.id, x.name) for x in Equipment.query.all()]))
mod = FieldList(StringField('Method of Delivery', validators = [Optional()]))
Ausblick:
def edit_branch(id):
branch = Branch.query.filter_by(id=id).first()
#populate data_in to be used by BranchForm
data_in = []
for eq_obj in branch.equipment_assoc:
data_in.append(('equipment', eq_obj.equipment.id))
data_in.append(('mod', eq_obj.mod))
editform = BranchForm(data=MultiDict(data_in))
if editform.validate_on_submit():
branch.name = editform.name.data
db.session.add(branch)
db.session.commit()
return redirect('/admin/branches/' + str(branch.id))
editform.name.data = branch.name
return render_template("branch_edit.html",
title="Edit Branch",
branch = branch,
editform = editform)
was mich abzuwerfen ist, dass überall sonst, dass ich nutzte ein WTForm-Formular und füllte die Felder mit Daten aus meiner Datenbank (wie für Bearbeitungsformulare), ich musste diese Formularfelder nach dem form.validate_on_submit() - Block ausfüllen, denn wenn nicht, dann wird das Formular niemals als was auch immer aktualisiert gesendet wird, wird sofort überschrieben.
Siehe „editform.name.data = branch.name“ (das ist, wie ich es immer getan habe)
Von jedem Beispiel habe ich festgestellt Online über einen Fieldlist bevölkert, ist es offensichtlich muss während der Instantiierung ausgeführt werden, aber das Formular muss auch vor validate_on_submit() instanziiert werden, da validate_on_submit() eine Methode des Formularobjekts ist.
Siehe "EditForm = BranchForm (data = MultiDict (Daten_Ein))" (das ist, wie ich habe FieldLists in allen Beispielen bevölkert gesehen, die ich je gesehen habe.)
Wie kann ich gehen über das Füllen meines Formulars mit seinen Feldlisten?
Danke für den Vorschlag, aber ich glaube, das ist die umgekehrte Richtung als ich danach bin. Ich versuche, mein Formular mit Daten aus meinem Modellobjekt zu füllen, anstatt mein Modellobjekt mit Daten aus meinem Formular zu füllen. – Chockomonkey
Ich denke, diese Zeile in der Antwort tut das: 'editform = BranchForm (obj = Zweig)' –
@PauloBu Ja, tut es, aber das funktioniert nur vor dem if validate_on_submit(): Block. Ich bin auf der Suche nach einer Möglichkeit, BranchForm nach der Instanziierung zu füllen. – Chockomonkey